Java 带字节伙伴的Slf4j记录器
我尝试插入一个名为Java 带字节伙伴的Slf4j记录器,java,slf4j,javaagents,byte-buddy,Java,Slf4j,Javaagents,Byte Buddy,我尝试插入一个名为ThreadPoolExecutor的java类,我想使用slf4j记录器获取线程的详细信息,我得到以下错误 Exception in thread "pool-2-thread-2" Exception in thread "pool-2-thread-1" java.lang.NoClassDefFoundError: com/github/shehanperera/threadagent/MonitorInterceptor at java.util.concur
ThreadPoolExecutor
的java类,我想使用slf4j记录器获取线程的详细信息,我得到以下错误
Exception in thread "pool-2-thread-2" Exception in thread "pool-2-thread-1" java.lang.NoClassDefFoundError: com/github/shehanperera/threadagent/MonitorInterceptor
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
at java.lang.Thread.run(Thread.java:748)java.lang.NoClassDefFoundError: com/github/shehanperera/threadagent/MonitorInterceptor
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
at java.lang.Thread.run(Thread.java:748)
这是我的经纪人
new AgentBuilder.Default()
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
.ignore(ElementMatchers.none())
.type(ElementMatchers.nameContains("ThreadPoolExecutor"))
.transform((builder, type, classLoader, module) -> builder
.method(ElementMatchers.nameContains("run"))
.intercept(Advice.to(MonitorInterceptor.class))
).installOn(instrumentation);
还有我的监听器
public class MonitorInterceptor {
public static Logger logger = LoggerFactory.getLogger(MonitorInterceptor.class.getName());
@Advice.OnMethodEnter
static void enter(@Advice.Origin String method) throws Exception {
logger.info(String.valueOf(Arrays.asList(Thread.currentThread().getStackTrace())));
}}
记录器正常工作,如果没有记录器,则正常工作。当我尝试在enter方法中使用logger时,会出现上述错误。
有什么建议吗 如果将类用作
通知
,则该类只是一个模板,而不是实际执行的代码。这意味着您不能引用对执行方法不可见的字段,例如类中的logger
字段
因为您正在检测JVM的一个类,所以该类将加载在引导路径上,而引导路径看不到将加载SLF4j等类的类路径。如果要向引导路径添加类,必须显式地这样做。调查一下这样做的原因