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中配置
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | <?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> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步