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 打印日志记录最佳实践