按时间(频率)过滤日志消息?

时间:2013-01-24 13:01:24

标签: java logging filtering logback

我有一些程序,其中日志事件经常发生。有没有办法按频率过滤该类的事件?例如,秒数不超过1条消息?

我专注于回归。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

以下是一种方法,使用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);

而不是直接打印消息,而是将其放入队列,计划任务将处理它。