MDC 使用
配置 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
-X 输出X个字符后对齐
%d 输出时间 {HH:mm:ss.SSS}内为时间格式
%thread 线程名字
%level 日志级别
%logger 执行类路径 {n}输出n个字符
%method 当前方法
%line 当前代码行数
%X{param} param MDC值
%msg 日志内容
%n 换行
-->
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %logger{20} - [%method,%line] %X{REQ_ID} >> %msg%n"/>
<!-- 省略若干配置 ....-->
</configuration>
MdcUtil
public class MdcUtil {
private final static String REQ_ID = "REQ_ID";
private final static String BUSINESS = "BUSINESS";
public static void putReqId(HttpServletRequest request){
try {
MDC.put(REQ_ID,request.getSession(true).getId());
} catch (IllegalArgumentException e) {
log.warn("获取 SessionId 失败");
}
}
public static void put(String key,String val){
MDC.put(key,val);
}
public static void put(String val){
MDC.put(BUSINESS,val);
}
public static String get(){
return MDC.get(BUSINESS);
}
public static void remove(){
MDC.remove(BUSINESS);
}
}
使用示例
@Slf4j
public class Test {
public static void main(String[] args) {
MdcUtil.put("新增用户");
one();
}
public static void one() {
log.info("第一步");
one1();
}
public static void one1() {
log.info("第二步");
one2();
}
public static void one2() {
log.info("第三步");
one3();
}
public static void one3() {
log.info("第四步");
}
}
输出
2022-06-27 14:25:25.650 新增用户 [main] INFO com.yunmell.Test - [one,17] >> 第一步
2022-06-27 14:25:25.651 新增用户 [main] INFO com.yunmell.Test - [one1,22] >> 第二步
2022-06-27 14:25:25.652 新增用户 [main] INFO com.yunmell.Test - [one2,27] >> 第三步
2022-06-27 14:25:25.652 新增用户 [main] INFO com.yunmell.Test - [one3,32] >> 第四步
上次更新: 2024/11/05, 08:29:31