我有一个由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中测试时,这在本地工作。只有当我把它打包到一个罐子里它才会停止工作。
答案 0 :(得分:0)
这里的问题是当Maven将jar与其所有依赖项打包在一起时会发生什么。如果有任何重叠的依赖项(即log4j和log4j-1.2-api),则其中一个将被添加到jar中,另一个将被排除。这是默默地完成的。它也与“mvn exec:java”不一致。
要确保log4j不是包,您需要浏览依赖项并添加
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
每个可能包含log4j的依赖项。这将阻止它被加载到jar中,确保只运行log4j2。您需要保持警惕,因为每当您添加依赖项时,您需要确保它没有将log4j作为瞬态依赖项。
最终你应该能够添加一个全局扩展(http://jira.codehaus.org/browse/MNG-1977?jql=text%20~%20%22global%20exclusion%22),但是现在你需要这样做。