1、在拦截器中 设置MDC 的变量
package com.sleep.demo.intercepter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.MDC; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.UUID; @Slf4j public class TraceInterceptor implements HandlerInterceptor { public static final String TRACE = "_trace"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String traceId = request.getHeader(TRACE); if (StringUtils.isBlank(traceId)) { traceId = UUID.randomUUID().toString().toUpperCase(); } MDC.put("TRACE_ID", traceId); return true; } }
2、在slf4j2.xml中配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<properties>
<!-- 文件输出格式 -->
<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread][%X{TRACE_ID}] - [%X{requestId}] %c [%L] -| %msg%n</property>
<!-- 日志根目录 -->
<property name="BASEDIR">D://mylog</property>
<Property name="rollingLogSize">1000 MB</Property>
<Property name="rollingLogMaxNum">10</Property>
</properties>
<appenders>
<Console name="CONSOLE" target="system_out">
<PatternLayout pattern="${PATTERN}" />
</Console>
<!-- 所有日志 -->
<RollingRandomAccessFile fileName="${BASEDIR}/all.log" filePattern="${BASEDIR}/%d{yyyyMMdd}/all.%d{yyyyMMdd}-%i.log"
immediateFlush="true" name="ALL_FILE">
<PatternLayout pattern="${PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${rollingLogSize}"/>
</Policies>
<DefaultRolloverStrategy max="${rollingLogMaxNum}">
<Delete basePath="${BASEDIR}" maxDepth="2">
<IfFileName glob="all.*.log"/>
<IfLastModified age="5D"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<!-- ERROR级别日志 -->
<RollingRandomAccessFile fileName="${BASEDIR}/error.log" filePattern="${BASEDIR}/%d{yyyyMMdd}/error.%d{yyyyMMdd}-%i.log"
immediateFlush="true" name="ERROR_FILE">
<Filters>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${rollingLogSize}"/>
</Policies>
<DefaultRolloverStrategy max="${rollingLogMaxNum}">
<Delete basePath="${BASEDIR}" maxDepth="2">
<IfFileName glob="error.*.log"/>
<IfLastModified age="5D"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
<RollingRandomAccessFile fileName="${BASEDIR}/warning.log" filePattern="${BASEDIR}/%d{yyyyMMdd}/warning.%d{yyyyMMdd}-%i.log"
immediateFlush="true" name="WARN_FILE">
<Filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${rollingLogSize}"/>
</Policies>
<DefaultRolloverStrategy max="${rollingLogMaxNum}">
<Delete basePath="${BASEDIR}" maxDepth="2">
<IfFileName glob="error.*.log"/>
<IfLastModified age="5D"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</appenders>
<loggers>
<logger name="org.springframework" level="WARN" />
<logger name="org.apache" level="WARN" />
<logger name="io.netty" level="WARN" />
<root level="DEBUG">
<!-- 若不注释该打印,将可能会出现两次打印的情况,调试时使用 -->
<appenderref ref="CONSOLE" />
<appenderref ref="ALL_FILE" />
<appenderref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE"/>
</root>
</loggers>
</configuration>
浙公网安备 33010602011771号