1 . 增加LogMdcFilter

package cn.xbz.common.filter;import org.slf4j.MDC;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** @title 为logback日志增加traceId* @author Xingbz* @createDate 2019-4-12*/
@WebFilter(urlPatterns = "/*", filterName = "logMdcFilter")
public class LogMdcFilter implements Filter {private static final String UNIQUE_ID = "traceId";@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic 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);}}}@Overridepublic void destroy() {}private boolean insertMDC() {UUID uuid = UUID.randomUUID();String uniqueId = uuid.toString().replace("-", "");MDC.put(UNIQUE_ID, uniqueId);return true;}
}

2 . 配置logback日志格式

将 [%X[traceId]] 添加到日志输出格式中

...<pattern>%d{HH:mm:ss} [%thread][%X{traceId}] %-5level %logger{36} - %msg%n</pattern>
...

3 . 异步任务补充

完成前2步之后 , 从前端发起的请求就可以输出traceId了 , 但是一些未经过前端的定时或异步任务 , 是走不了过滤器的 . 所以我们还需要添加一个类

package cn.xbz.common.aspect;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;/*** @title 为异步方法添加traceId* @author Xingbz* @createDate 2019-4-16*/
@Aspect
@Component
public class LogMdcAspect {private static final String UNIQUE_ID = "traceId";@Pointcut("@annotation(org.springframework.scheduling.annotation.Async)")public void logPointCut() {}@Around("logPointCut()")public Object around(ProceedingJoinPoint point) throws Throwable {MDC.put(UNIQUE_ID, UUID.randomUUID().toString().replace("-",""));Object result = point.proceed();// 执行方法MDC.remove(UNIQUE_ID);return result;}
}

4 . 大功告成

logback利用mdc机制为日志增加traceId相关推荐

  1. MDC机制实现日志的链路追踪

    一.问题描述 排查问题用得最多的方式是查看日志,但是在现有系统中,各种无关日志穿行其中,导致没办法快速的找出用户在一次请求中所有的日志. 二.问题分析 我们没办法快速定位用户在一次请求中对应的所有日志 ...

  2. 切面是异步还是同步操作‘_分布式中采用Logback的MDC机制与AOP切面结合串联日志...

    导读:在实际开发中,打印日志是十分重要的.在生产环境中,如果日志打得好可以快速地排查问题,而在分布式的场景下,一个请求会跨越多个节点,既一个业务可能需要多个节点协调配合处理.那么日志将会分散,而为了更 ...

  3. 基于SLF4J MDC机制实现日志的链路追踪

    一.打印HTTP request body和response body实现日志跟踪 request 的inputStream和response 的outputStream默认情况下是只能读一次, 不可 ...

  4. Slf4j之MDC机制

    什么是MDC机制 MDC(Mapped Diagnostic Contexts)映射诊断上下文,主要用在做日志链路跟踪时,动态配置用户自定义的一些信息,比如requestId.sessionId等等. ...

  5. Slf4j MDC机制

    MDC 简介 MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器. Logback设计的一个目标之一是对分布式应用系统的审计和调试.在现在的分布 ...

  6. 利用钩子机制取得Windows的消息监控权

    利用钩子机制取得Windows的消息监控权 我们知道,Windows系统是建立在消息传递机制基础上的,几乎所有的程序活动都由消息来驱动.Windows的钩子机制可以看作是一个消息中转站,控制系统发出消 ...

  7. Java日志(slf4j+logback)及打印彩色日志

    一.maven依赖 在pom文件增加slf4j+logback依赖 <!-- 版本配置 --> <properties><slf4j.version>1.7.21& ...

  8. MySQL面试知识点追命连环问(三)锁机制、日志备份及分表策略

    ​上次我们讨论了MySQL的事务索引,SQL优化和处理器. MySQL面试知识点追命连环问(二)事务.索引及SQL优化 这次我们继续来追命连环问关于MySQL锁机制,日志备份和扩展性等相关的内容. 锁 ...

  9. Logback 配置文件这么写,日志 TPS 提高 10 倍

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 何甜甜在吗 来源 | juejin.im/post/5d4d61326fb9a06 ...

最新文章

  1. cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题
  2. c++ enum 给定类型_C++11作用域内枚举enum
  3. java 返回语句_Java:“缺少返回语句”
  4. Java模板引擎 FreeMarker介绍1
  5. Mobile如何通过重定向来定制主页
  6. 通过tomcat配置solr 4.10.3
  7. 在计算机上找不到autocad,天正提示找不到可用的AutoCAD版本怎么办?
  8. Python 一百多行实现抢票助手
  9. 安装oracle显示无法解析的,1、pl/sql无法连接本机的oracle(ORA 12154:TNS:无法解析指定的连接标识符)解决方法:pl/sql不能安装在Program Files(...
  10. C# 彻底删除文件或目录,不可恢复,文件清除工具
  11. 4.Python数据结构与算法分析课后习题__chapter4
  12. 如何及时汇报反馈工作
  13. linuxci‘pang磁盘管理的实验报告
  14. 【计算机网络】因特网概述
  15. outlook收件延迟严重_你(严重)对我不了解的五件事
  16. java 汽车售票_基于jsp的长途汽车售票系统-JavaEE实现长途汽车售票系统 - java项目源码...
  17. 观览世界格局——蒙古风币wsec新动作
  18. 2014迅雷校园招聘试题
  19. vue里面使用pdfjs-dist+fabric实现pdf电子签章!!!
  20. Java将图片转换成二进制,将二进制转换成图片

热门文章

  1. Bluetooth篇 开发实例之六 蓝牙RSSI计算距离
  2. 模块的封装性分析-读书笔记
  3. EBS功能安全性基本原理
  4. oracle存储过程入门之hello world
  5. 【ES6】对象、函数、数组的扩展
  6. PCL学习(4.5)——点云对象的两种定义方式的区别与转换
  7. 求链式线性表的倒数第K项 (20 分)
  8. 7-2 个位数统计 (15 分)
  9. 如何改变php的语言变中文,修改Yii2的默认语言language为中文zh-CN的方法
  10. 值得收藏的8个Web端组件库