2017-02-27 58 views
2

我正在尝试查找如何每隔几秒记录一次调试消息以避免日志垃圾邮件。如何避免在Java中每隔几秒记录一次垃圾邮件

说,我有以下功能。

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

    // do some task 

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

该功能获取循环

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

我不希望得到打印的日志信息100次叫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 
} 

有没有更好的方式来做到这一点?谢谢!

+5

而不是将'i'传入函数,那么在循环中进行日志记录呢? – nickb

+0

可能有一些其他调用doSomething()的函数。所以我认为做功能的日志记录更好 – SyncMaster

+0

可能重复[如何限制日志频率?](http://stackoverflow.com/questions/10212644/how-to-limit-logging-frequency) – jmehrens

回答

2

当我遇到同样的问题时,我开发了一个节流记录器,它最初表现得像一个普通的记录器。但是在记录消息之后,所有进一步的消息都会跳过,直到一段时间过去。每秒钟之后,允许记录更多的消息。

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

+0

我会保持将最后一些消息缓存在双端队列中,并在记录错误或警告时将它们记录为上下文。 – Messa

相关问题