我有一些程序,其中日志事件经常发生。有没有办法按频率过滤该类的事件?例如,秒数不超过1条消息?
我专注于回归。
答案 0 :(得分:0)
您可以查看一下logback过滤器 http://logback.qos.ch/manual/filters.html
具体来说,看一下DuplicateMessageFilter。如果这还不够,你可以尝试扩展它并实现类似的东西。
答案 1 :(得分:0)
以下是一种方法,使用ConcurrentLinkedQueue
和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);
而不是直接打印消息,而是将其放入队列,计划任务将处理它。