【问题标题】:Filter log messages by time (frequency)?按时间(频率)过滤日志消息?
【发布时间】:2013-01-08 05:54:35
【问题描述】:

我有一些经常发生日志事件的程序。有什么方法可以按频率过滤该类中的事件吗?例如,每秒不超过 1 条消息或其他什么?

我专注于 logback。

【问题讨论】:

  • 这是一个自定义的记录行为,你有几个选择:1-自定义记录器,用于你想要减少记录的类别(因为这不是一个常见的使用场景),2-降低级别日志记录(即日志重复太多次的DEBUG而不是INFO),3-日志事件的AOP,添加逻辑以忽略相应类别中的重复日志。我会选择 2,只记录重要的而不是非常重复的内容。例如,您可以将这些调试日志发送到单独的文件中。

标签: java logging filtering logback


【解决方案1】:

您可以查看 logback 过滤器 http://logback.qos.ch/manual/filters.html

具体来说,看看 DuplicateMessageFilter。如果这还不够,您可以尝试扩展它并实现类似的东西。

【讨论】:

    【解决方案2】:

    这是一种方法,使用ConcurrentLinkedQueueScheduledExecutorService

    private Queue<LogMessage> messages = new ConcurrentLinkedQueue<LogMessage>();
    private int messagesPerSecond = 3;
    private ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
    
    private Runnable scheduledTask = new Runnable()
    {
        @Override
        public void run()
        {
            LogMessage message = messages.poll();
            if(message != null) printMessage(message);
        }
    };
    
    // ...
    
    ses.scheduleAtFixedRate(, 0, 1000/messagesPerSecond, TimeUnit.MILLISECONDS);
    

    并且不是直接打印消息,而是将其放入队列中,调度任务将处理它。

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多