使用 logback,但不知何故 log4j 被初始化
Using logback, but somehow log4j getting initialized
我们的控制台应用程序正在使用 logback 进行日志记录。
类路径中有一个 logback.xml 文件。
日志记录在大多数平台(Linux、Windows、jdk7 或 jdk8)上按预期工作(通过 logback)。
但是,在使用 jdk6 的 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 进行日志记录?
感谢您的建议。
我在您的类路径中没有看到 log4j-over-slf4j
...也许这就是您所缺少的以确保任何 log4j 相关代码通过正确的 slf4j 日志记录实现(logback)?
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.10</version>
</dependency>
问题是 log4j.jar 在用户 Java 的扩展目录中:/Library/Java/Extensions
我们通过 运行 java 和 -verbose
发现了这一点,它指出了 log4j.jar 从哪里加载。
解决方法是在 运行 我们的应用程序时禁用扩展文件夹:
export JAVA_OPTS=-Djava.ext.dirs=""
由于机器不是我们的,我们无法应用清理扩展目录的(更好的)永久解决方案。
我们的控制台应用程序正在使用 logback 进行日志记录。 类路径中有一个 logback.xml 文件。
日志记录在大多数平台(Linux、Windows、jdk7 或 jdk8)上按预期工作(通过 logback)。
但是,在使用 jdk6 的 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 进行日志记录?
感谢您的建议。
我在您的类路径中没有看到 log4j-over-slf4j
...也许这就是您所缺少的以确保任何 log4j 相关代码通过正确的 slf4j 日志记录实现(logback)?
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.10</version>
</dependency>
问题是 log4j.jar 在用户 Java 的扩展目录中:/Library/Java/Extensions
我们通过 运行 java 和 -verbose
发现了这一点,它指出了 log4j.jar 从哪里加载。
解决方法是在 运行 我们的应用程序时禁用扩展文件夹:
export JAVA_OPTS=-Djava.ext.dirs=""
由于机器不是我们的,我们无法应用清理扩展目录的(更好的)永久解决方案。