【发布时间】:2014-08-01 17:32:11
【问题描述】:
我有一个由 maven 生成的 jar,其中包含所有必要的依赖项。在这个 jar 的根目录中,我有 log4j2.xml 配置文件。我使用命令“java -cp myJar.jar myClass”执行 jar。此时我的应用程序将毫无问题地运行,但我会在控制台上得到以下 logj4 错误输出:
log4j:WARN No appenders could be found for logger (myClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
有趣的是,我的 log4j2.xml 文件在某些时候被解析和使用,因为它将用于记录的文件已创建。只是它似乎在这个过程中被解析和设置得太晚了。
我只包含了 log4j2 依赖项,但我确实有桥梁,以防依赖项使用 log4j。此外,当我在 eclipse 中测试时,这在本地有效。只有当我将它打包到 jar 中时它才会停止工作。
【问题讨论】:
-
在您的示例中,您的类路径中没有 log4j。
-
Log4j 在我的类路径中,就在 jar 中。正如我提到的,jar 包含所有依赖包。为了添加更多上下文,我删除了所有桥依赖项,发现我的代码正在使用 v1.2 库。通过将它们更改为 2.0 命名空间版本,我从库中获得了预期的输出。这似乎仍然是一种糟糕的行为,因为这些库应该能够做到这一点,所以 v1.2 的东西会被路由到 v2.0。关键问题是“mvn java:exec”和执行由“mvn package”创建的jar,应该功能相同。