我试图找到如何每隔几秒钟记录一次调试消息,以避免日志垃圾邮件。
说,我有以下功能。
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
}
有更好的方法吗?谢谢!
答案 0 :(得分:3)
我不确定您使用的是哪种日志框架。如果您碰巧使用log4j,我猜您可以使用系统属性AsyncLogger.WaitStrategy以某种方式配置延迟。看看https://logging.apache.org/log4j/log4j-2.3/manual/async.html。
答案 1 :(得分:2)
当我遇到同样的问题时,我开发了一个节流记录器,它最初的行为就像一个普通的记录器。但是在记录n
消息之后,将跳过所有其他消息,直到一段时间过去。每秒后,可以记录更多消息。
当开始压制消息时,您应该记录此消息,以及再次开始记录时。