java - 如何使用 log4j 记录每 20 个发生的事件?

标签 java logging log4j

我有一个循环。我希望每 20 (100) 次执行查看一些日志。到目前为止,我有一些相当复杂的代码来做到这一点,

for( int i = 0; i < aValues.length; ++i )
{
    if( c_LOG.isTraceEnabled() && ( ( i % 20 ) == 0 ) )
    {
        c_LOG.trace( "Converted item (" + i + ") " );
    }
    .....
}  

这段代码实现了我想要的功能,但是代码很长(4行)并且类似的代码出现了很多次。我无法将其打包到方法中,因为这会导致日志输出中的方法名称困惑。 (log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{3}:(%M %L) %m%n )有什么好的方法可以解决这个问题吗?

最佳答案

最简单的解决方案就是重构:

    for (int i = 0; i < aValues.length; ++i) {
        if (shouldLog(i)) {
            c_LOG.trace("Converted item (" + i + ")");
        }
        ....
    } 

    ....

public boolean shouldLog(int n) {
    return shouldLog(n, 20);
}

public boolean shouldLog(int n, int mod) {
    return c_LOG.isTraceEnabled() && ((n % mod) == 0);
}

关于java - 如何使用 log4j 记录每 20 个发生的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627392/

相关文章:

Java 7 构造函数

java - 即使应用程序不在主要焦点,是否可以在后台应用程序中运行计时器?

java - 使用fasterxml将json回复解析为对象时出现com.fasterxml.jackson.databind.exc.MismatchedInputException

php - 仅在 PHP 中已知的用户记录 MySQL 数据库更改

java - Tomcat 服务器中的 Log4j FileAppender 问题

java - "if"语句背后的逻辑是什么?使用 for 循环绘图

docker - 无需root即可将docker登录到filebeat

java - JCL 通过 SLF4j 登录 Glassfish

tomcat - log4j 与 Tomcat6

java - 什么时候以及为什么在打印日志时使用字符串格式更好?