如何规范记录指令产生的打印输出量随着时间的推移而产生?

如何在Y秒内将程序日志打印输出限制为最多X个打印输出?

使用java.util.logging编程服务器端,我的代码有很多信息,警告和错误语句,如:

s_logger.logp(Level.WARNING, myClassName, myMethodName, "msg.code.in.properties.file"); 

一方面,我确实希望看到上面的警告信息打印到STDOUT,因为它表明出现了问题,特别是在调查生产中的问题时,但另一方面,打印了许多讲述相同故事的线条在很短的时间内,没有附加价值,而是打击性能并引入滚动失明。

我正在寻找的是一种机制/ API,可以在y秒内将每个消息代码的打印输出调整为不超过x条消息。 例如,在一分钟内,我不想生成和写入超过10个类型的消息:“事务超时”。

我很高兴API或库参考,任​​何人?

如果你想使用标准的日志库/机制,你可以在标准记录器周围生成自己的包装器,它将检查你是否记录的条件,并且只有在满足条件时才将信息传递给记录机制。

或者你可以编写自己的(简单的,或许不是)记录器:)

谢谢。 我已经考虑过了。
我希望有一些已经存在的东西,因为我认为这个问题在服务器端开发项目中很常见。

吉利,我不确定开箱即用的这种东西。 像Logback这样的良好日志记录实现将允许您为代码的每个部分定义记录器,然后配置每个记录器的日志记录级别(例如,默认情况下仅限WARN及以上消息,但对于控制区域的记录器,则为INFO甚至FINE)重新主动调试)。

日志记录实现通常还可以管理多个日志文件,将当前日志转换为压缩归档版本,并定期或每当日志文件变得过大时开始新的日志文件。

如果您控制代码,则可以修改日志记录语句,以便不生成如此多的冗余警告。 例如,如果您获得了大量的事务超时,也许您可​​以在完全放弃之前等待事务开始尝试之间的连续更长时间。 (这样做的好处是可以降低实现事务的服务器上的负载,从而为他们提供恢复时间。)

zappan提到的另一种方法是创建自己的日志filter。 在java.util.logging中,您可以将自己的filter附加到filter以限制它们打印出来的内容。

更复杂的过滤方法是将日志记录实现配置为在多播地址而不是文件上发送所有日志消息。 您将编写一个过滤程序来监听多播并有选择地将您想要的那些写入磁盘(例如,如果您有分布式系统,这可以在日志聚合服务器上运行)。 其他filter可以提取最重要的消息并更新系统运行状况的图形显示。

如何在Y秒内将程序日志打印输出限制为最多X个打印输出?

如果您可以访问JavaMail 1.5.5或logging-mailhandler 1.5.5 ,则可以使用com.sun.mail.util.logging.DurationFilter来限制特定的java.util.logging.Logger或java.util.logging.Handler。 。

我正在寻找的是一种机制/ API,可以在y秒内将每个消息代码的打印输出调整为不超过x条消息。 例如,在一分钟内,我不想生成和写入超过10个类型的消息:“事务超时”。

如果超时消息仅对一个记录器是本地的,那么它与上面的相同。 否则,您必须创建自定义filter。 正如在其他答案中指出的那样,用其他filter组成filter并不困难。

另一种选择是创建代理处理程序,在将它们发布到某个其他下游处理程序之前,缓冲并删除给定时间窗口内的重复消息。