<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