正如在这个链接中所讨论的:如何在log4j中创建自己的Appender?
为了在log4j 1.x中创建自定义appender,我们必须扩展AppenderSkeleton类并实现其append方法.
类似地我们如何在log4j2中创建自定义appender,因为我们没有扩展AppenderSkelton类,所有其他appender扩展AppenderBase类.
有没有办法在运行时创建log4j Logger,将日志消息收集到缓冲区?
我目前有一个记录许多事件的类.对于需要监视记录的事件的远程应用,我想只是交换在记录到一个缓冲区记录,然后检索该缓冲区,而不是重构类.例如给出类似的东西:
Class Foo{
Logger log = ....;
public void doSomething(){
log.debug(...
.. actual code
log.debug(...
}
}
Run Code Online (Sandbox Code Playgroud)
//我想从一些外部代码做什么:
String showFooLog(){
Foo f = new Foo();
f.log=new Logger(...
f.doSomething();
return f.log.contents();
}
Run Code Online (Sandbox Code Playgroud)
编辑:找到一个更短的解决方案,从Jared的帖子中指出(虽然它仍然不是线程安全的).谢谢您的帮助.
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()
Run Code Online (Sandbox Code Playgroud) 我想设置我的测试日志,以便主要抑制日志输出 - 除非测试失败。然后我想要调试输出。
我知道只修改测试类路径中的 log4j.properties 的手动解决方案,或者只是让调试日志记录始终对测试处于活动状态 - 但我不想用不需要的绿色测试输出向控制台发送垃圾邮件。
对于失败的测试,我希望自动构建为我提供调试输出,以防出现一些奇怪的环境问题。
我一直在想应该有一个 appender 可以与 junit 规则结合使用,该规则在测试结果已知之前抑制输出,然后只有在测试失败时才推迟记录到另一个 appender。
我可能自己做这个,但我想知道是否有人以前尝试过这个,或者是否有更好的解决方案。