【问题标题】:Log4J skipping logs in multithreading?Log4J 在多线程中跳过日志?
【发布时间】:2014-06-13 09:12:30
【问题描述】:

我正在尝试对将运行大约 4,000,000 个条目并严重依赖记录每个条目的实用程序进行压力测试。我正在使用 Log4J 使用 RollingFileAppender 将我的条目记录到磁盘上。

我解决这个问题的方法是创建线程,每个线程包含 2,000 个条目。这相当于大约 200 个线程。

启动器如下:

public static int COUNT = 0;

public static void main(String args[]) throws IOException {

    final Logger logger = Logger.getLogger("Sift Science Bulk");
    final ExecutorService executor = Executors.newFixedThreadPool(200);

    for (int i=0; i<200; i++) {

        final Runnable uploader = new Runnable() {
            @Override
            public void run() {
                for (int j=0; j<2000; j++) {
                    synchronized (logger) {
                        logger.info("test");
                        COUNT++;
                    }
                }
            }
        };
        executor.execute(uploader);

    }

    executor.shutdown(); // Wait until all threads are finished. Just don't accept new threads.

    while (!executor.isTerminated()) { /*JUST ITERATE INDEFINITELY*/ }
    System.out.println(COUNT);

}

最后的结果有点奇怪……

  • System.out.println 将按预期打印 4,000,000,但是
  • log4j 生成的文件将只有 ~200,000 行!

我错过了什么?谢谢大家。

【问题讨论】:

  • 请发布您的 Log4j 配置。

标签: java log4j


【解决方案1】:

您也应该发布您的 log4j 配置。 RollingFileAppender 的全部意义在于,当日志文件达到一定大小时,它会被移动到备份中。检查您实际上没有生成多个日志文件,每个日志文件都包含 200,000 行。

【讨论】:

    【解决方案2】:

    我知道出了什么问题。你猜对了——这是一个配置问题。 RollingFileAppender 的 MaxBackupIndex 设置为 1,这是为了确保它只保留 1 个备份文件,从而覆盖我之前的条目!

    现在正确的配置如下:

    <appender name="appender1" class="org.apache.log4j.RollingFileAppender"> 
        <param name="File" value="trace.log"/> 
        <param name="Threshold" value="TRACE"/> 
    
        <!-- FIX BELOW -->
        <param name="MaxBackupIndex" value="100000000"/>
        <param name="MaxFileSize" value="100MB"/>
        <!-- FIX ABOVE -->
    
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n"/> 
        </layout> 
    </appender>
    


    同样感谢您的帮助 - 非常感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2016-10-30
      • 2020-02-01
      • 1970-01-01
      • 2018-05-20
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多