ログイベントが頻繁に発生する手順がいくつかあります。そのクラスのイベントを頻度でフィルタリングする手段はありますか? たとえば、1 秒あたり 1 メッセージ以下ですか?
私はログバックに焦点を当てています。
これが1つの方法で、aConcurrentLinkedQueue
と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);
メッセージを直接印刷する代わりに、メッセージをキューに入れると、スケジュールされたタスクがメッセージを処理します。
ログバック フィルターを参照できます http://logback.qos.ch/manual/filters.html
具体的には、DuplicateMessageFilter を見てください。それだけでは不十分な場合は、拡張して同様のものを実装することができます。