java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot MDC日志

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

作者:TOP灬小朋友

本文介绍了如何在SpringBoot项目中使用MDC(Mapped Diagnostic Context)为日志增加唯一标识,以便于日志追踪,通过创建日志拦截器、配置拦截器以及修改日志配置文件,可以实现这一功能,文章还提供了源码地址,方便读者学习和参考,感兴趣的朋友一起看看吧

【JAVA】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪

1.日志效果

2.实现步骤

2.1.创建日志拦截器 LoggingInterceptor

@Component
public class LoggingInterceptor implements HandlerInterceptor {
    private static final String LOG_ID = "logId";
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String simpleUUID = IdUtil.simpleUUID();
        String logId =String.format("[logId:%s]", simpleUUID);
        MDC.put(LOG_ID, logId);
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        MDC.remove(LOG_ID);
    }
}

2.2.配置拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Resource
    private LoggingInterceptor loggingInterceptor;
    /**
     * 注册拦截器
     *
     * @param registry 入参
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册日志拦截器
        registry.addInterceptor(loggingInterceptor).addPathPatterns("/**");
    }
}

2.3.修改日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 读取application.yml中的日志配置 -->
    <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
    <springProperty scope="context" name="LOG_NAME" source="logging.file.log-name"/>
    <springProperty scope="context" name="MAX_HISTORY" source="logging.file.days"/>
    <!-- 定义控制台输出格式 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{logId} %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 定义每天生成一个日志文件,并归档生成压缩包 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./${LOG_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天生成一个日志文件 -->
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 最多保留指定天数的日志文件 -->
            <maxHistory>${MAX_HISTORY}</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{logId} %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 日志级别设置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

3.源码地址

https://gitee.com/xhs101/spring-boot-demo

到此这篇关于SpringBoot项目使用MDC给日志增加唯一标识的文章就介绍到这了,更多相关SpringBoot MDC日志增加唯一标识内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文