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

Java 是否可以让Log4J 2将所有内容保存在内存中并按需输出?,java,maven-3,log4j2,junit5,Java,Maven 3,Log4j2,Junit5,好的,我想解决的问题是CI中的测试过于冗长。现在,我可以大体上关闭日志记录,但当您实际需要调试日志记录时,这会造成伤害。我想我要做的是在内存中累积所有日志,然后设置当套件出错或成功时发出的实际级别,然后发出/追加需要发出的日志。如果我可以在异常堆栈失败时通过检查异常堆栈来实现这一点,那么就可以获得额外的积分。这可能吗 事实上,这是同一个问题,但6年后我们得到了log4j2和junit5,所以我想知道这是否已经改变了。不,那个观察者仍然是它(换句话说,写你自己的),因为你的请求仍然很奇怪。时间不会

好的,我想解决的问题是CI中的测试过于冗长。现在,我可以大体上关闭日志记录,但当您实际需要调试日志记录时,这会造成伤害。我想我要做的是在内存中累积所有日志,然后设置当套件出错或成功时发出的实际级别,然后发出/追加需要发出的日志。如果我可以在异常堆栈失败时通过检查异常堆栈来实现这一点,那么就可以获得额外的积分。这可能吗


事实上,这是同一个问题,但6年后我们得到了log4j2和junit5,所以我想知道这是否已经改变了。

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

日志框架喜欢尽快编写,而不是稍后。毕竟,可能VM即将发生硬崩溃,而这是缓存某些写操作的最糟糕时刻——提供硬崩溃细节的日志语句现在都被以太丢失了

通常情况下,解决方案是使用读取日志文件并以某种方式处理它们的工具——通常是在复制和压缩日志时将大部分行挤出,只保留最近几次日志的完整转储(和未压缩)

存在的关键原则是:一个单独的进程(甚至不可能用java编写)稍后执行此操作

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

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

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

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

免责声明:我是系统规则的作者。

为什么不将日志发送到一个文件中,如果失败,让CI将日志文件保存在其“工件”中或您的CI称之为的任何东西中?@rena不太重要的是,CI将允许我查看原始文件。哈,我根本无法配置我们的CI系统。它由另一个团队管理。我还没有真正注意到一个CI系统可以,开箱即用。