为什么Bytebuddy仪器不能使用org.slf4j类?

时间:2019-06-26 03:13:53

标签: java slf4j byte-buddy

我试图检测org.slf4j.Logger以便拦截日志调用并通过Java代理存储它们。我的代码如下:

CASE

LogAdvice具有以下方法:

new AgentBuilder.Default()
                .with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
                .type(hasSuperType(nameContains("Logger")))
                .transform(new AgentBuilder.Transformer.ForAdvice()
                        .include(Agent.class.getClassLoader())
                        .advice(named("info"), LogAdvice.class.getName()))
                .installOn(inst);

但是永远不会输入此方法。 我的方法可以与我尝试过的其他类(例如java.util.Map的put()方法)配合使用。为什么在这种情况下无法使用仪器?

1 个答案:

答案 0 :(得分:0)

注册一个AgentBuilder.Listener以查看要检测的类。我怀疑您正在寻找的课程是在注册代理之前加载的。

在这种情况下,您可以注册重新转换策略以重新转换这些类。

顺便说一句:在这里,我看不到急切的初始化有多么有用。我看不到为此需要任何已检测类的初始化。