Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带字节伙伴的Slf4j记录器_Java_Slf4j_Javaagents_Byte Buddy - Fatal编程技术网

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等类的类路径。如果要向引导路径添加类,必须显式地这样做。调查一下这样做的原因