SIFT Appender 를 사용하여 로그 분기처리
[설정]
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</Pattern>
</encoder>
</appender>
<appender name="TST" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]-%msg%n</Pattern>
</encoder>
</appender>
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>discr</key>
<defaultValue>type</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${discr}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/${discr}.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d [%thread] %level %mdc %logger{35} SIFT- %msg%n</Pattern>
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/${discr}_%d{yyyy-MM-dd-HH-mm}.%i.log</fileNamePattern>
</rollingPolicy>
</appender>
</sift>
</appender>
<logger name="jpabook.jpashop.service.OrderService" level="error" additivity="false">
<!--<appender-ref ref="TST"/>-->
<appender-ref ref="SIFT"/>
</logger>
<root level="debug">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
|
cs |
[테스트]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import org.slf4j.MDC;
@Slf4j
public class Sample {
public void testLog(){
MDC.put("discr", "TYP1");
//log.
log.trace("test trace");
log.debug("test debug");
log.info("test info");
log.warn("test warn");
log.error("test error");
MDC.put("discr", "TYP2");
log.error("test error222");
}
}
|
cs |
[결과]
* ThreadPool 사용시 MDC key값을 전달받지 못함.
: MDC.setContextMap 으로 key 값 전달가능
참고 : https://stackoverflow.com/questions/6073019/how-to-use-mdc-with-thread-pools
* slf4j MDC 를 사용하지 않더라도, strategy pattern 과 같은 디자인 패턴을 사용하고, 분기처리할 구현체에 logger 를 지정하여 패키지 경로마다 별도 로그 파일 및 별도 경로의 로그파일에 로그 적재가 가능할 듯.
반응형
'back > Spring Boot' 카테고리의 다른 글
Resilience4j / CircuitBreaker 개념 (0) | 2023.05.10 |
---|---|
[Spring Boot] junit 기본 사용법 (0) | 2019.12.26 |
token, jwt , oauth 2.0 (0) | 2019.12.17 |
[Spring Boot] 게시판 만들기 4 : JUnit 을 활용한 단위테스트 (0) | 2019.09.20 |
[Spring Boot] 게시판 만들기 2 : DB 연동 및 Mybatis 설정 (0) | 2019.09.19 |