Java 基础学习总结(203)—— 生成唯一 ID 打印日志记录最佳实践

Posted 科技D人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 基础学习总结(203)—— 生成唯一 ID 打印日志记录最佳实践相关的知识,希望对你有一定的参考价值。

原因

几乎所有的 Java 项目中的默认日志框架都会选择 slf4j,在打印日志时,每行数据都有一个请求 ID,这样会方便追踪日志。也可以使用一些链路追踪框架来实现这种目的。

实现

slf4j 里有一个 MDC 类,是 ThreadLocal 的实现,保存在这里的变量都会绑定到某一个请求线程中,在该请求的线程里的日志代码都可以使用设置的变量。例如:

<pattern>%dyyyy-MM-dd HH:mm:ss.SSS [%XREQUEST_ID] [%thread] [%-5level] [%logger0:%L] : %msg%n</pattern>
其中 %X参数名 是引用其中的值

在项目中定义拦截器或者 AOP 来将拦截住所有的请求,并在 MDC 中设入变量。

实现步骤

我这里选择配置的是 AOP 切面来实现在 MDC 中设入 REQUEST_ID 来为每一个请求添加 ID。

@Aspect
@Slf4j
@Component
public class ApiMessageAdvisor 

    /**
     * 为每一个调用Controller方法的请求做一个切面
     * @param pjp
     * @return
     */
    @Around("execution(public * com.sso.controller..*Controller.*(..))")
    public Object invokeAPI(ProceedingJoinPoint pjp) 
        // 1.获取当前接口对应的类名和方法名
        String apiName =

以上是关于Java 基础学习总结(203)—— 生成唯一 ID 打印日志记录最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础学习总结(203)—— 生成唯一 ID 打印日志记录最佳实践

java生成扑克牌----java基础学习总结

2017-2018-1 20155204 《信息安全系统设计基础》第十一周学习总结

Java NIO学习系列五:I/O模型

20145205 《信息安全系统设计基础》第5周学习总结

20145311 《信息安全系统设计基础》第十四周学习总结