2

ログイベントが頻繁に発生する手順がいくつかあります。そのクラスのイベントを頻度でフィルタリングする手段はありますか? たとえば、1 秒あたり 1 メッセージ以下ですか?

私はログバックに焦点を当てています。

4

2 に答える 2

0

これが1つの方法で、aConcurrentLinkedQueueScheduledExecutorService:を使用します。

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

ログバック フィルターを参照できます http://logback.qos.ch/manual/filters.html

具体的には、DuplicateMessageFilter を見てください。それだけでは不十分な場合は、拡張して同様のものを実装することができます。

于 2013-01-24T16:27:08.930 に答える