我正在实现一个引擎,该引擎封装了在隔离的类加载器中执行的所有代码。我想创建一个Logback Appender,以保留将在我的引擎上运行的代码中的所有日志。
为此,我正在尝试使用ByteBuddy。
protected void append(LoggingEvent event) {
System.out.println(event);
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if (name.equals("io.vepo.logger.MyAppender")) {
return new ByteBuddy().with((TypeDescription superClass) -> name)
.subclass(
TypeDescription.Generic.Builder.parameterizedType(
Class.forName("ch.qos.logback.core.UnsynchronizedAppenderBase", false, this),
Class.forName("ch.qos.logback.classic.spi.LoggingEvent", false, this))
.build())
.method(ElementMatchers.named("append"))
.intercept(MethodDelegation.to(this).withAssigner((source, target, typing) -> StackManipulation.Trivial.INSTANCE))
.make()
.load(this, ClassLoadingStrategy.Default.INJECTION)
.getLoaded();
} else {
return super.findClass(name);
}
}
如何实现Assigner
来将LogginEvent转换为我的主类加载器?