按时间(频率)筛选日志消息



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

我专注于回退。

您可以查看回落筛选器http://logback.qos.ch/manual/filters.html

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

这是使用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);

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

最新更新