日誌列印TraceId,一棧查log
阿新 • • 發佈:2020-12-23
1、在springBoot啟動類上加上@ServletComponentScan
2、新增filter類LogTraceFilter.java,其中Tid的生成規則可按需修改。
package com.xxx.xxx.xxx.provider.common.filter;
import cn.com.xxx.xxx.core.commons.utils.CommonIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import javax.servlet. *;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* 日誌traceId新增
* Created by xxx on 2020/11/26 12:11
*/
@Slf4j
@WebFilter(filterName = "logTraceFilter", urlPatterns = "/*")
public class LogTraceFilter implements Filter {
private static final String TRACE_ID = "traceRootId";
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
boolean bInsertMDC = insertMDC ();
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
if (bInsertMDC) {
MDC.remove(TRACE_ID);
}
}
}
@Override
public void destroy() {
}
private boolean insertMDC() {
String traceRootId = String.valueOf(CommonIdGenerator.generatId());
MDC.put(TRACE_ID, traceRootId);
return true;
}
}
3、日誌配置檔案logback.xml中加上[%X{traceRootId}]
程式碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--日誌加密處理-->
<!-- <conversionRule conversionWord="msg" converterClass="com.xxx.xxx.commons.logfilter.FilterSensitiveInforConverter"></conversionRule>-->
<property name="logPath" value="/home/worker/logs/xxxxx"/>
<property name="logName" value="xxxxxx"/>
<appender class="ch.qos.logback.core.ConsoleAppender" name="STDOUT">
<encoder>
<charset>UTF-8</charset>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%-40.36logger{40}:%-4.4line] [%X{traceRootId}] - %msg%n</pattern>
</encoder>
</appender>
<!-- 日誌檔案 appender定義 -->
<appender class="ch.qos.logback.core.rolling.RollingFileAppender"
name="infoAppender">
<File>${logPath}/${logName}_info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${logPath}/history/%d{yyyy-MM,aux}/%d{yyyy-MM-dd}.${logName}_info.log
</fileNamePattern>
<maxHistory>90</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%-40.36logger{40}:%-4.4line] [%X{traceRootId}] - %msg%n</pattern>
</encoder>
</appender>
<!-- error日誌 -->
<appender class="ch.qos.logback.core.rolling.RollingFileAppender"
name="errorAppender">
<File>${logPath}/${logName}_error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logPath}/history/%d{yyyy-MM,aux}/%d{yyyy-MM-dd}.${logName}_error.log
</FileNamePattern>
<maxHistory>90</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%-40.36logger{40}:%-4.4line] [%X{traceRootId}] - %msg%n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 只打印錯誤日誌 -->
<level>WARN</level>
</filter>
</appender>
<logger additivity="false" name="com.xxxxx">
<level value="DEBUG"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger additivity="false" name="org.springframework">
<level value="ERROR"/>
<appender-ref ref="errorAppender"/>
</logger>
<!--myibatis log configure -->
<logger level="DEBUG" name="java.sql.Connection"/>
<logger level="DEBUG" name="java.sql.Statement"/>
<logger level="DEBUG" name="java.sql.PreparedStatement"/>
<root level="DEBUG">
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>