java - 如何使用logback防止日志轰炸?

标签 java logging logback slf4j

我不确定“轰炸”这个词是否正确。我所说的轰炸是指同一内容(消息和参数)多次发生的日志。

例如,拒绝服务附加可能会导致日志警告,表明未经身份验证的用户正在尝试访问某些 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]

所以,我在这里寻找两个功能:

  1. 禁止过于重复的日志。
  2. 显示沉默日志的摘要。

知道是否以及如何使用 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/

相关文章:

debugging - 在play框架中设置开发的DEBUG级别

spring - Spring项目中如何添加 Sentry 监控

java - 有没有办法从每个日志级别的两个单独的 logback.xml 文件配置 logback?

java - 如何让 Janino 使用 logback(未声明名为 "contains"的方法)

java类没有任何方法,但在static关键字下包含逻辑

java - 线程是如何并发创建的

java - 如何让 SLF4J 输出一些日志语句?

java - 错误 500 : LocalTransaction rolled-back due to setRollbackOnly

java - java中重写的概念

java - 如何分离Tomcat中的web应用日志记录