【问题标题】:Log4j logging thresholdLog4j 日志记录阈值
【发布时间】:2013-11-08 05:35:19
【问题描述】:

与日志级别有关的当前日志记录阈值(TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL) 对我来说还不够。在紧急情况下,我有 1 GB 的日志从第三方库写入 ERROR 类别。我不想关闭此日志记录,因为我想查看此问题日志。大多数日志都在不断重复堆栈跟踪。 所以我想要一种追加器,它将

  • 1) 如果达到阈值 (kb/sec),则跳过日志(我的意思是当我们 写入大量日志 - 我们可能会跳过一些)或
  • 2) 跳过堆栈跟踪 如果在一段时间内打印了超过一个 (n) 堆栈跟踪,则打印

请推荐

【问题讨论】:

    标签: logging log4j


    【解决方案1】:

    Log4j 没有这种开箱即用的附加程序。但您可以执行以下操作:

    为使用千兆字节数据的第三方库添加附加程序(“我有一个千兆字节的日志从第三方库写入错误类别”)。并配置您的附加程序,使其不使用如此大量的存储空间。

    1. RollingFileAppender 将此第三方库附加程序配置为滚动文件。一段时间后,他们将使用最旧的文件,而您只能保留最新的日志。

    2. JDBCAppender 此附加程序接受存储过程的使用。编写一个存储过程,以便它执行您想要的操作。

    对于您的第一个要求,添加一个计算列或在存储过程中计算此值并添加到您的表列中。然后控制这个值来决定是否需要将此日志行插入数据库。

    对于您的第二个要求,您可以获取异常消息的哈希值(MD5、SHA 等)。如果此哈希值存在于数据库表中,您可以忽略插入它。或者您可以计算其中存在的数量并相应地决定如何插入到数据库中。

    你不需要为这些目的使用企业数据库,例如你可以使用 apache derby,然后你的所有日志都保留在应用程序服务器中。我认为这个 JDBCAppender 更符合您的要求。

    【讨论】:

      【解决方案2】:

      我过去写过类似的东西(每 Y 次最多发送 X 封邮件)。它会给你一个方向。设置器不是强制性的,但它们允许您通过 log4j.properties 更改默认值。

      public class LimitedSMTPAppender extends SMTPAppender {
      
          private int limit = 10;           // max at 10 mails ...
          private int cycleSeconds = 3600;  // ... per hour
      
          public void setLimit(int limit) {
              this.limit = limit;
          }
      
          public void setCycleSeconds(int cycleSeconds) {
              this.cycleSeconds = cycleSeconds;
          }
      
          private int lastVisited;
          private long lastCycle;
      
          protected boolean checkEntryConditions() {
              final long now = System.currentTimeMillis();
              final long thisCycle =  now - (now % (1000L*cycleSeconds));
              if (lastCycle!=thisCycle) {
                  lastCycle = thisCycle;
                  lastVisited = 0;
              }
              lastVisited++;
              return super.checkEntryConditions() && lastVisited<=limit;
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-17
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-16
        • 1970-01-01
        • 2014-06-19
        相关资源
        最近更新 更多