使用logback,但不知何故log4j被初始化

时间:2015-01-20 16:36:25

标签: java logging log4j slf4j logback

我们的控制台应用程序正在使用logback进行日志记录。 在类路径中有一个logback.xml文件。

在大多数平台(Linux,Windows,jdk7或jdk8)上,日志记录按预期工作(通过logback)。

但是,在使用jdk 6的Mac上,运行应用程序时我们有时会看到:

log4j:WARN No appenders could be found for logger (our.class.Here).
log4j:WARN Please initialize the log4j system properly.

由于某种原因,似乎选择log4j进行日志记录而不是logback。 在our.class.Here我们登录slf4j:

private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(our.class.Here.class);

这是完整的类路径:

/path/etc/logback.xml:/path/lib/pdfbox-1.8.4.jar:/path/lib/fontbox-1.8.4.jar:/path/lib/jempbox-1.8.4.jar:/path/lib/jcl-over-slf4j-1.7.7.jar:/path/lib/bcprov-jdk15-1.45.jar:/path/lib/bcmail-jdk15-1.45.jar:/path/lib/xmlgraphics-commons-1.5.jar:/path/lib/icepdf-core-5.0.4.jar:/path/lib/jai-codec-1.1.3.jar:/path/lib/jai-core-1.1.3.jar:/path/lib/jewelcli-0.6.jar:/path/lib/commons-lang3-3.1.jar:/path/lib/commons-io-2.2.jar:/path/lib/logback-classic-1.1.0.jar:/path/lib/logback-core-1.1.0.jar:/path/lib/itext-2.1.7.jar:/path/lib/hibernate-validator-4.2.0.Final.jar:/path/lib/slf4j-api-1.7.5.jar

我们如何进一步排除故障以了解为什么选择log4j而不是logback进行日志记录?

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

我没有在你的类路径中看到log4j-over-slf4j ...也许这就是你所缺少的,以确保任何与log4j相关的代码都通过正确的slf4j日志记录impl(logback)?

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.10</version>
  </dependency>

答案 1 :(得分:1)

问题是log4j.jar位于用户的Java扩展目录中:/Library/Java/Extensions

我们通过运行带有-verbose的java来找到它,它指出了log4j.jar从哪里加载。

解决方法是在运行我们的应用时禁用extensions文件夹: export JAVA_OPTS=-Djava.ext.dirs=""

由于机器不是我们的,我们无法应用(更好)永久解决方案来清理扩展程序的目录。