Есть ли способ создать Log4j Logger во время выполнения, который будет собирать сообщения регистрации в буфер?
В настоящее время у меня есть класс, который регистрирует ряд событий. Для удаленного приложения, которому необходимо отслеживать зарегистрированные события, я бы хотел просто поменять регистратор, который регистрирует в буфере, а затем извлечь буфер, а не рефакторизовать класс. Например. учитывая что-то вроде:
Class Foo{
Logger log = ....;
public void doSomething(){
log.debug(...
.. actual code
log.debug(...
}
}
// что я хотел бы сделать из внешнего кода:
String showFooLog(){
Foo f = new Foo();
f.log=new Logger(...
f.doSomething();
return f.log.contents();
}
Возможно ли это?
Редактировать: Нашел более короткое решение, на которое указывает публикация Джареда (хотя это все еще не безопасно для потоков). Спасибо за помощь.
Logger l = Logger.getLogger( ... );
StringWriter writer = new StringWriter();
WriterAppender appender = new WriterAppender( new HTMLLayout(), writer );
l.addAppender( appender );
... run code here
writer.flush();
l.removeAppender( appender );
return writer.toString()