log4j 缺少静态记录器类字段的日志输出

trnvg8h3  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(152)

在Jenkins上的Maven构建中执行JUnit测试时,某些日志未写入控制台。

class Foo {
    static final Logger log = LoggerFactory.getLogger(Foo.class);

    static Logger log() {
        return LoggerFactory.getLogger(Foo.class);
    }

    void baz() {
        log.error("error 1")
        log().error("error 2")
    }
}

方法baz从我的JUnit测试中调用,并且在Jenkins上执行构建时记录了error 2,但是缺少error 1。我无法在本地重现该问题。在我的机器上执行相同的Maven构建时,我看到了两个日志语句的输出。
我在Jenkins上和本地运行相同的Java版本:

OpenJDK Runtime Environment Temurin-11.0.16.1+1 (build 11.0.16.1+1)

是否有任何提示,说明可能是什么原因导致了这种情况,或者我如何进一步深入问题以找到根本原因?

**更新:**我可以看到第一个日志记录语句中的Logger示例与第二个日志记录语句中的示例不同。

vdgimpew

vdgimpew1#

我们套件中的一些其他测试在某个时候调用了LogManager.shutdown。这导致静态最终记录器引用失效。显然,这是在一些其他不相关的更改导致测试执行顺序改变之后才开始出现的,因此日志记录系统的关闭将发生在其他测试使用相关记录器之前。

相关问题