代码之家  ›  专栏  ›  技术社区  ›  j.barrio

如何读取多线程log4j2缓冲区

  •  2
  • j.barrio  · 技术社区  · 6 年前

    我已经用多线程执行了自动化测试用例,由 maven-surefire-plugin . 每个类都有自己的执行线程和 日志4J2 配置为 bufferIO = true immediateFlush= true . 在输出文件中,所有线程都在混合信息。我知道

    question related 但还没有找到解决办法。因此,我正试图寻找另一条路。

    1 回复  |  直到 6 年前
        1
  •  1
  •   j.barrio    6 年前

    我发现的第一件事是 JUnit5 JUnit4 默认输出,通常是控制台等待测试用例的结尾写入。

    另一方面,输出文件 log4j ,当用户使用多线程执行它时,总是显示混合所有线程,而不管JUnit版本如何。

    %d{yyyy-MM-dd HH:mm:ss} %-5p- **[%tid]** %m%n

    在完成每个线程之后,我读取输出log4j文件的最后一行,并根据线程id号进行过滤以获得相关的行。有了这一点,我不得不解决另一个问题。如何获取动态log4j输出日志文件的绝对路径?我测试了两种解决方案:

    1. 实现您自己的FileAppender以创建访问 fileName 领域

    遵循第一个选项的两个步骤如下:

    LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
    Appender appender = ctx.getConfiguration().getAppenders().get("file");
    

    这个 appender