仅当存在警告或更严重级别的日志事件时记录所有级别

Posted

技术标签:

【中文标题】仅当存在警告或更严重级别的日志事件时记录所有级别【英文标题】:Log all levels only when there is a log event at warn or more severe levels 【发布时间】:2020-04-27 00:09:47 【问题描述】:

如何仅在遇到错误、致命或警告级别日志事件时记录所有级别的事件(即信息、调试、跟踪、警告、错误和致命),否则仅记录信息级别。这可确保仅在必要时(即检测到警告或错误时)记录调试和跟踪日志(通常非常大),从而节省空间并提高性能。

【问题讨论】:

错误级别事件之前应该缓冲多少日志事件,以便在错误级别事件发生时可以刷新它们? --- 在记录错误级别事件之后应该记录多少或多长时间? 这基本上意味着您希望将X日志事件保留在队列中的内存中,直到错误到达,然后刷新队列。或者,如果没有错误到达,则继续切割队列的尾部以仅保留 X 事件而不是更多事件。我认为没有开箱即用的解决方案,您必须滚动自定义处理程序或其他东西,具体取决于您使用的实际日志记录。 @Andreas 没有这样的限制。 所有 事件之前必须以某种方式排队。如果在终止时我们还没有遇到错误级别,那么队列就会被清除。如果我们遇到错误,所有以前的日志和遇到此类事件后的所有日志都会被记录下来。 @M.Prokhorov 最好的方法是什么。是否有任何日志框架通过更改配置来提供这样的功能。 @AkshayGRao 最佳方法: 在启动时创建一个新的日志文件。在程序退出时,如果没有错误则删除文件。防止需要浪费大量内存缓存日志条目。创建一个自定义 Appender 来实现它。 【参考方案1】:

我建议你投票给LOG4J2-1137。

【讨论】:

以上是关于仅当存在警告或更严重级别的日志事件时记录所有级别的主要内容,如果未能解决你的问题,请参考以下文章

提升日志记录集输出级别

syslog的接收日志

Log4j 为每个 appender 设置不同的日志记录级别

系统日志记录方案

接口测试基础——第4篇logging模块

接口测试基础——第4篇logging模块