是否有可能让Log4J 2将所有内容保留在内存中并按需输出?



好的,所以我想解决的问题是CI中的测试过于冗长。现在我可以在一般情况下关闭日志记录,但是当您真正需要调试日志记录时,这会造成伤害。我想我想做的是积累内存中的所有日志,然后设置实际级别,当套件出错或成功时发出,然后发出/追加需要的日志。如果我能在异常堆栈失败时检查异常堆栈,那就更有好处了。这可能吗?

可能的重复真的是同样的问题,但在6年里,我们得到了log4j2和junit5,所以我想我想知道这是否已经改变了。

不,这个观察者仍然是它(换句话说,写你自己的),因为你的请求仍然是奇怪的。时间不会改变这一点。

日志框架喜欢尽快写,而不是稍后。毕竟,也许虚拟机即将硬崩溃,而这绝对是缓存一些写操作的最糟糕的时间——提供硬崩溃洞察的日志语句现在已经丢失到以太中。

通常,解决方案是使用工具读取日志文件并以某种方式处理它们——通常,在复制和压缩它们的过程中删除大部分行,只保留最近的几个日志的完整转储(和未压缩的)。

这里的关键原则是:一个单独的进程(甚至可能不是用java编写的)稍后完成这个任务。

你能配置你的CI系统来做这个吗?这听起来像是正确的方法:在相当详细的级别记录日志,如果测试成功,则在测试运行后让CI系统将日志剥离到更严格的级别。

对于JUnit 4,库System Rules允许您抑制为成功测试而写入控制台的输出。您必须将规则SystemErrRuleSystemOutRule添加到您的测试中。

@Rule
public final SystemErrRule muteSystemErr
= new SystemErrRule().muteForSuccessfulTests();
@Rule
public final SystemOutRule muteSystemOut
= new SystemOutRule().muteForSuccessfulTests();

免责声明:我是System Rules的作者。

相关内容

  • 没有找到相关文章

最新更新