基于logback添加唯一追踪ID

1、添加过滤器LogbackFilter

package com.myself.ssmTest.web.filter;

import org.slf4j.MDC;

import javax.servlet.*;
import java.io.IOException;
import java.util.UUID;

/**
 * 增加输出日志traceRootId
 */
public class LogbackFilter implements Filter {

	private static final String UNIQUE_ID = "traceRootId";

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
						 FilterChain chain) throws IOException, ServletException {
		boolean bInsertMDC = insertMDC();
		try {
			chain.doFilter(request, response);
		} finally {
			if(bInsertMDC) {
				MDC.remove(UNIQUE_ID);
			}
		}
	}

	private boolean insertMDC() {
		UUID uuid = UUID.randomUUID();
		String uniqueId = UNIQUE_ID +"-"+ uuid.toString().replace("-", "");
		MDC.put(UNIQUE_ID, uniqueId);
		return true;
	}

	@Override
	public void destroy() {

	}

}

2、在src\main\webapp\WEB-INF\web.xml文件的加上过滤器的配置

  <filter>
    <filter-name>logbackFilter</filter-name>
    <filter-class>com.yz.rainbowbridgewebcenter.filter.LogbackFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>logbackFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3、logback加上traceRootId

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--文件资源的引用-->
    <property resource="app.properties"/>
    <!-- 默认输出文件 -->
    <appender name="DEFAULT-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/default/common-default.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- 默认错误文件 -->
    <appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/error/common-error.log.%d{yyyyMMdd}</fileNamePattern>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>
    <!-- 性能日志文件 -->
    <appender name="PERF-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/perf/common-perf.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- 默认dao日志文件 -->
    <appender name="DAO-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/dao/common-dao.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- service日志文件 -->
    <appender name="SERVICE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/service/common-service.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- 业务日志文件 -->
    <appender name="BUSINESS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/business/common-business.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- WEB日志文件 -->
    <appender name="WEB-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/web/common-web.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- 报警日志 -->
    <appender name="ALARM-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/alarm/common-alarm.log.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
        </encoder>
    </appender>
    <!--默认追踪日志-一般model或工具类日志用此  -->
    <appender name="TRACE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.home}/trace/tracing.log.%d{yyyy-MM-dd-HH}.gz</fileNamePattern>
            <maxHistory>72</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d - [%m]%n</pattern>
        </encoder>
    </appender>
    <!-- ===================================================================== -->
    <!-- Loggers                                                               -->
    <!-- ===================================================================== -->
    <logger name="com.myself.ssmTest.controller" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="WEB-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
        <logger name="com.myself.ssmTest.service" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="SERVICE-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
     <logger name="com.myself.ssmTest.dao" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="DAO-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
     <logger name="com.myself.ssmTest.model" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="TRACE-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
     <logger name="businessLogger" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="BUSINESS-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
    <logger name="com.tuan.core.common.aop.pref.PerformanceMonitorInterceptor" additivity="false">
    	<level value="INFO"/>
    	<appender-ref ref="PERF-APPENDER"/>
    </logger>
   
    <logger name="java.sql" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="DAO-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
    
    <logger name="alarmLogger" additivity="false">
        <level value="${log.root.level}"/>
        <appender-ref ref="ALARM-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>
    <!-- 屏蔽logger-start -->
    <logger name="org.springframework" level="${log.root.level}"/>
    <logger name="org.apache" level="WARN"/>
    <logger name="org.mybatis.spring" level="${log.root.level}"/>
    <!-- 屏蔽jdk日志 -->
    <logger name="java" level="WARN"/>
    <logger name="com.mchange" additivity="false">
        <level value="WARN"/>
        <appender-ref ref="DAO-APPENDER"/>
    </logger>
    <!-- 屏蔽logger-end-->
    <root level="${log.root.level}">
        <appender-ref ref="DEFAULT-APPENDER"></appender-ref>
        <appender-ref ref="ERROR-APPENDER"></appender-ref>
    </root>
</configuration> 

相关文章:
logback的搭建与使用-maven项目:https://blog.csdn.net/qq_25646191/article/details/81004513

logback的搭建与使用-maven项目
logback的搭建与使用-maven项目
logback的搭建与使用-maven项目

猜你喜欢

转载自blog.csdn.net/qq_25646191/article/details/81004852