<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> logback-spring.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <property name="log.path" value="F:\\study\\log" /> <property name="projectname" value="insurance-service" /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder charset="UTF-8"> <pattern>%d [%thread] %-5p [%c] [%F:%L] [tracesss=%X{traceId}] - %msg%n</pattern> </encoder> </appender> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 过滤日志 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <file>${log.path}/error/errorAppender.log</file> <Prudent>true</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/errorAppender.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} error [%thread] %level %logger{35} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="insurantFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/insurant/insurant.log</file> <Prudent>true</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/insurant/insurant.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} insurant [%thread] [%X{traceId}] %level [%c] [%F:%L] - %msg%n </pattern> <charset>UTF-8</charset> </encoder> </appender> <logger name="cn.com.xmh.controller.TestController" level="INFO"> <appender-ref ref="insurantFile"/> </logger> <!--<logger name="org.apache" level="INFO">--> <!--<appender-ref ref="baseFile" />--> <!--</logger>--> <!-- additivity="false" 若是additivity设为true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出--> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration> lombok插件 @Controller @RequestMapping("/cos") @Slf4j public class TestController { log.info("hello1*****************mytestlog"); traceId设置 public class LogMdcFilter implements Filter { private static final String UNIQUE_ID = "traceId"; @Override public void init(FilterConfig filterConfig) { System.out.println("init**********filter************************************"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("doFilter**********filter************************************"); boolean bInsertMDC = insertMDC(); try { chain.doFilter(request, response); } finally { if(bInsertMDC) { MDC.remove(UNIQUE_ID); } } } @Override public void destroy() { } private boolean insertMDC() { UUID uuid = UUID.randomUUID(); String uniqueId = uuid.toString().replace("-", ""); MDC.put(UNIQUE_ID, uniqueId); return true; } } @Configuration public class MyConfig extends WebMvcConfigurationSupport { @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); LogMdcFilter filter = new LogMdcFilter(); registrationBean.setFilter(filter); //设置过滤器拦截请求 List<String> urls = new ArrayList<>(); urls.add("/*"); registrationBean.setUrlPatterns(urls); return registrationBean; } 异步任务traceId设置 @Aspect @Component public class LogMdcAspect { private static final String UNIQUE_ID = "traceId"; @Pointcut("@annotation(org.springframework.scheduling.annotation.Async)") public void logPointCut() { } @Around("logPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { MDC.put(UNIQUE_ID, UUID.randomUUID().toString().replace("-","")); Object result = point.proceed();// 执行方法 MDC.remove(UNIQUE_ID); return result; } }
原文:https://www.cnblogs.com/xingminghui111/p/14589019.html