1 背景
我们的项目目前使用zander(公司内部的链路追踪组件, 基于skywalking)作为日志增强组件, 在日志中打印traceId, 用于多服务请求追踪标识.
目前我们服务中遇到了traceId消失的问题, 即zander中对log4j2的字节码增强失败. 需要分析原因
2 bytebuddy实现的javaagent
zander中为了实现日志增强, 采用了javaagent的方式, 对log4j的相应方法做拦截增强, 将traceid写入到对应的log文件中.
我们的工程中使用的是log4j2, 对应的增强方法为org.apache.logging.log4j.core.config.LoggerConfig#callAppenders, 该方法位于lo4j-core-2.x.x.jar
我们知道, javaagent在执行时, 会执行Premain-Class下的premain方法, 我们找到zander的Premain-Class ZanderAgent以及对应premain方法如下(做了些删减)
1 | public static void premain(String agentArgs, Instrumentation instrumentation) { |