日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。本文通过增加xthrowable,让日志栈打印traceId。
一、异常堆栈无traceId 排查定位问题异常痛苦
在日常项目开发中,我们会自定义一个traceId方便,链路追踪。在log4j2.xml 我们可能是这样去配置日志打印格式。
<Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="${APP_NAME} %-d{yyyy-MM-dd HH:mm:ss} [%-5p] [%X{TRACE_ID}] (%c{1}:%L) %m%n"/> </Console>
异常堆栈打印效果是这样的,报错输出的堆栈,没有携带trace_id信息。
这样在做日志筛查时候,非常不方便。不能快速定位异常代码位置。
二、如何修改log4j.xml,让堆栈末尾添加traceId信息
可以通过%xthrowable 配合{suffix(pattern)}使用,在每个堆栈帧的末尾添加trace_id输出。
${APP_NAME} %-d{yyyy-MM-dd HH:mm:ss} [%-5p] [%X{TRACE_ID}] %xThrowable{suffix(%X{TRACE_ID})} (%c{1}:%L) %m%n
添加后,验证效果,堆栈信息末尾都添加了traceId。