Spring Boot:每个日志语句中的LOGBack自定义字段

Sub*_*a M 6 spring logback spring-boot

想要分享以下工作,我努力寻找这个信息:

要求是将业务关联ID(AccCode和Mac)放在每个日志语句中.这可以通过使用映射诊断上下文(MDC)来完成..

无需了解LOGBack appender-> Encoder-> Layout如何工作.

Spring启动log4j.properties具有以下模式:

LOG_LEVEL_PATTERN=%5p
LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] boot%X{context} - ${PID} ${LOG_LEVEL_PATTERN} [%t] --- %c{1}: %m%n

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}
Run Code Online (Sandbox Code Playgroud)

使用自定义字段从application.properties覆盖LOG_LEVEL_PATTERN:

logging.pattern.level=AccCode:%X{AccCode} Mac:%X{Mac} %5p
Run Code Online (Sandbox Code Playgroud)

请注意,现在我们在布局中定义了两个额外的字段.AccCode和Mac.需要使用MDC提供这些新字段的值:

 MDC.put("AccCode", "46014" ); 
 MDC.put("Mac", "2025b9bcf"); 
Run Code Online (Sandbox Code Playgroud)

然后所有的日志语句都有AccCode和Mac,如下所示:

2016-09-12 09:11:37.574 **AccCode:46014** **Mac:2025b9bcf** DEBUG 9724 --- [main] c.c.p.sph.http.client.SphApAdminClient   : Loging out from Sph 
Run Code Online (Sandbox Code Playgroud)