如何理解我们应用程序中的日志记录

问题描述 投票:0回答:1

我们的应用程序使用,

对于普通日志记录(.log):log4j2 由 log4j-core.jar、log4j-api.jar、log4j2-extensions.jar 支持

对于控制台日志记录 (.out):log4j (1.2),因为我们也有使用 log4j 1.2 的 jboss。我这么假设是因为这是我在 log4j.jar MANIFEST 文件中看到的内容。

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Implementation-Title: JBoss [Trinity]
Implementation-Version: 4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=20
 0707131605)
Specification-Vendor: JBoss (http://www.jboss.org/)
Specification-Title: JBoss
Implementation-Vendor-Id: http://www.jboss.org/
Created-By: ari-49095-20050826-1856-linux-ia32 (BEA Systems, Inc.)
Specification-Version: 4.2.1.GA
Implementation-URL: http://www.jboss.org/
Implementation-Vendor: JBoss Inc.

我们还有 slf4j-api.jar (2.0.7)

现在,我的问题是我们最近添加了一个使用 slf4j-api (2.0) 的 shaded 第三方 (TP1.jar) jar。但在它们的阴影目录中,我还可以在 JCL 目录中看到一些与 SLF4j 相关的类。不确定它们有何关系?

因此,为了从此 TP1.jar 启用 slf4j 的日志记录,我尝试添加 log4j-slf4j-impl-2.17.1.jar 但它不起作用。为什么?

所以我尝试使用 slf4j-log4j12.jar (1.6.1),它确实开始记录在我们的控制台 (.out) 日志文件中。正如预期的那样,它正在抱怨:

SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [jar:file:xxx]

但是日志记录是如何发生的?

现在我有另一个第三方 jar (TP2.jar),它也使用 SLF4j,但不适用于 slf4j-log4j12.jar (1.6.1),仅适用于 2.x。为什么问题是第三方 jar 特定的?

java log4j log4j2 slf4j apache-commons-logging
1个回答
0
投票

问题是,

jboss-client.jar
在应用程序类路径中位于前面,并且有一个阴影的
slf4j-api.jar
,这是
1.x
版本。因此,稍后出现在类路径中的
slf4j-api.jar
(2.x) 并未被考虑。因此,该应用程序有效地具有
slf4j-api.jar
1.x.

© www.soinside.com 2019 - 2024. All rights reserved.