Java 按时间(频率)筛选日志消息?
我有一些经常发生日志事件的过程。有没有办法按频率过滤该类事件?例如,每秒不超过1条消息或其他内容Java 按时间(频率)筛选日志消息?,java,logging,filtering,logback,Java,Logging,Filtering,Logback,我有一些经常发生日志事件的过程。有没有办法按频率过滤该类事件?例如,每秒不超过1条消息或其他内容 我将重点放在logback上。您可以查看logback过滤器 具体来说,请看DuplicateMessageFilter。如果这还不够,您可以尝试扩展它并实现类似的功能。这里有一种方法,使用a和a: 专用队列消息=新建ConcurrentLinkedQueue(); 私有int messagesPerSecond=3; private ScheduleXecutorService ses=执行者。
我将重点放在logback上。您可以查看logback过滤器 具体来说,请看DuplicateMessageFilter。如果这还不够,您可以尝试扩展它并实现类似的功能。这里有一种方法,使用a和a:
专用队列消息=新建ConcurrentLinkedQueue();
私有int messagesPerSecond=3;
private ScheduleXecutorService ses=执行者。NewsingleThreadScheduleXecutor();
private Runnable scheduledTask=new Runnable()
{
@凌驾
公开募捐
{
LogMessage=messages.poll();
如果(消息!=null)打印消息(消息);
}
};
// ...
ses.scheduleAtFixedRate(,0,1000/messagesPerSecond,TimeUnit.ms);
而不是直接打印消息,而是将消息放入队列,计划的任务将处理它。这是日志记录的自定义行为,您有几种选择:1-要减少日志记录的类别的自定义日志记录程序(因为这不是常见的使用场景),2-降低日志记录级别(ie DEBUG,而不是INFO,用于日志重复次数太多),3-AOP用于日志事件,添加逻辑以忽略相应类别中的重复日志。我将使用2,只记录重要且不太重复的内容。例如,您可以将这些调试日志发送到单独的文件。
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);