我不确定“轰炸”这个词是否正确。我所说的轰炸是指同一内容(消息和参数)多次发生的日志。
例如,拒绝服务附加可能会导致日志警告,表明未经身份验证的用户正在尝试访问某些 API。日志:
[03-29 11:26:01.000] missing token
[03-29 11:26:01.001] missing token
[03-29 11:26:01.005] missing token
... overall 100000 times
我试图解决的问题是防止日志变得很大。尺寸是一个问题。此外,由于重复消息数量过多,其他重要消息可能不会被看到。
我希望能够防止此类日志轰炸并获得一些聚合消息,例如:
[03-29 11:26:01.000] missing token
[03-29 11:26:06.000] missing token [silenced. Overall 100000 times]
所以,我在这里寻找两个功能:
- 禁止过于重复的日志。
- 显示沉默日志的摘要。
知道是否以及如何使用 logback 来完成此操作吗?也许另一个日志记录工具可以支持此操作?谢谢。
最佳答案
DuplicateMessageFilter
,它过滤掉完全相同的重复消息,可能符合您的第一个要求。目前,过滤器在指定阈值后停止所有重复消息(通过allowedRepititions
设置),这可能not be desirable 。如果您希望在新消息或 based on time 上重置重复计数,则必须扩展过滤器。但是,它不提供静默日志的摘要。
示例日志配置:
<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter" allowedRepetitions="2"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console" />
</root>
</configuration>
关于java - 如何使用logback防止日志轰炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551480/