Я реализую движок, который инкапсулирует весь код, выполняемый в изолированном загрузчике классов. Я хочу создать 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 к моему основному загрузчику классов?