2

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

我专注于logback。

4

2 回答 2

0

这是一种方法,使用 aConcurrentLinkedQueue和 a ScheduledExecutorService

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);

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

于 2013-01-24T16:38:43.860 回答
0

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

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

于 2013-01-24T16:27:08.930 回答