如何通过Java中的每几秒记录来避免日志垃圾邮件

时间:2017-02-27 22:13:25

标签: java logging

我试图找到如何每隔几秒钟记录一次调试消息,以避免日志垃圾邮件。

说,我有以下功能。

public void doSomething() {
    // log is a logger object from org.slf4j
    log.debug("doSomething: Enter");

    // do some task

    log.debug("doSomething: Exit");
    return;
}

此函数在循环中被调用100次

for (int i = 0; i < 100; i++) {
    doSomething();
    thread.sleep(100); // sleep for 100 milli seconds
}

我不希望日志消息被打印100次。我想让它每秒打印一次或类似的东西。

有什么事我可以控制吗?我可以想到将“迭代i”传递给doSomething()并仅在我进行某次迭代时打印日志。

类似的东西,

public void doSomething(int i) {
    if (i == 25) {
        // log is a logger object from org.slf4j
        log.debug("doSomething: Enter");
    }
    // do some task

    if (i == 25) {
        // log is a logger object from org.slf4j
        log.debug("doSomething: Exit");
    }
    return;
}


for (int i = 0; i < 100; i++) {
    doSomething(i);
    thread.sleep(100); // sleep for 100 milli seconds
}

有更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

我不确定您使用的是哪种日志框架。如果您碰巧使用log4j,我猜您可以使用系统属性AsyncLogger.WaitStrategy以某种方式配置延迟。看看https://logging.apache.org/log4j/log4j-2.3/manual/async.html

答案 1 :(得分:2)

当我遇到同样的问题时,我开发了一个节流记录器,它最初的行为就像一个普通的记录器。但是在记录n消息之后,将跳过所有其他消息,直到一段时间过去。每秒后,可以记录更多消息。

当开始压制消息时,您应该记录此消息,以及再次开始记录时。