티스토리 뷰

반응형
반응형

MDC(Mapped Diagnostic Context)

멀티 클라이언트 환경에서 다른 클라이언트와 값을 구별하여 로그를 추적할 수 있도록 제공되는 map이다.

ThreadLocal에 구별할 수 있는 키 값을 저장하여 Thread가 존재하는 동안 계속해서 사용할 수 있도록 하는 방법으로

현재 log4j 및 logback만 MDC기능을 제공하고 있다.

 

애플리케이션에서 MDC 사용하기

springboot 2.1.1 , jdk 1.8

1. 의존성 주입

springboot 환경에서는 spring-boot-starter-web을 의존성으로 추가하면 logback이 기본으로 포함되어 있다.

maven

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

 

2. 사용법

1) java code

http://logback.qos.ch/manual/mdc.html

java.util.Map 과 사용법이 같다.

put 현재의 쓰레드 컨텍스트 맵에 key로 식별되는  value를  저장한다.
get key로 value를 식별하여 컨텍스트에서 꺼내온다.
remove key로 식별되는 value를 컨텍스트에서 제거한다.
clear MDC의 모든 항목을 지운다.

 

2) logback

http://logback.qos.ch/manual/mdc.html

Pattern에 MDC.put에 넣은 키 값을  아래와 같은 형식으로  적어주면 된다. 

%X{key}

 

3. 애플리케이션 적용

1) java code

인터셉터를 만들어서 컨트롤러에 진입하기 전에 traceId를 MDC안에 put하고

비즈니스 로직을 수행한 뒤 인터셉터를 나갈 때 MDC를 clear 하였다.

 

2) logback

 

인터셉터에서 사용한 key값 traceId를 logback pattern에 추가

 

4. 로그

MDC.put 이후 traceId 로그에 출력 

 

MDC.clear 이후 traceId 제거

 

적용 후기

 

로그를 추적할 때 하드코딩으로 남기는 키 값과 쓰레드 번호를 기준으로 로그를 쉽게 찾는 경우가 있다. 그러나 트래픽이 많고 별도 쓰레드를 만들어서 요청 건을 가져오는 경우에는 쓰레드 번호가 중복되어 로그를 찾기 어려운 점이 있고, 하나하나 하드코딩으로 특정 키 값을 로그에 남기기에는 꽤 공수가 든다. 위와 같은 문제들로 인해 회사의 레거시 프로젝트에서 로그를 추적하기 어려운 부분이 있어서 MDC를 적용하여 로그 추적의 효율성을 높인 적이 있다. 만약 진행하고 있는 프로젝트가 spring cloud를 도입하기에 어렵지 않은 구조라면 Spring Cloud Sleuth를 이용하면 더 쉽게 로그를 추적할 수 있고 Zipkin과 연동하여 다양한 기능을 사용할 수 있다.

 

 

참고

logback.qos.ch/manual/mdc.html

 

Chapter 8: Mapped Diagnostic Context

Chapter 8: Mapped Diagnostic Context 和訳 (Japanese translation) Lock the doors. —LEROY CAIN, Flight Director, Columbia Mission Control One of the design goals of logback is to audit and debug complex distributed applications. Most real-world distribut

logback.qos.ch

egloos.zum.com/charmpa/v/2543451

 

NDC & MDC ?

1. NDC ( Nested Diagnostic Context) 로깅은 복잡한 분산 응용에서 매우 유용하다.실생활에 쓰이는 대다수의 복잡한 분산 시스템들은 멀티쓰레드로 동작한다.웹프로그램도 역시 멀티쓰레드로 동작한다.

egloos.zum.com

 

 

 

 

 

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함