Log4j2/slf4j - 是否应该从类路径中删除 commons-logging.jar?
Log4j2/slf4j - Should commons-logging.jar be removed from classpath?
我的日志依赖项当前如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.9.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
我注意到 commons-logging.jar
出于某种原因仍在我的类路径中。我应该排除它还是不会引起任何问题?
到目前为止我没有注意到任何问题,但我仍然想知道那个 jar 是否仍然会以某种方式引起问题。
存在使用 commons-logging
的依赖项。如果它不存在,您将在他们尝试登录时收到 NoClassDefFoundErrors
。如果有可能让那些甚至 try 都没有使用依赖项的人使用依赖项,那将不是问题。不过可能性不大。
但是,如果他们使用 commons-logging
而您使用的是 SLF4J
,那就有问题了。他们登录错误的地方(从你的角度来看)。这就是日志桥开始工作的地方。他们实现了 public API 不同的日志记录框架,但将日志记录重定向到您正在使用的内容。
对于 SLF4J
有 several bridges(双向),所以不是引入 commons-logging
,而是引入 jcl-over-slf4j
。图书馆会认为他们正在使用 commons-logging
,而实际上他们正在使用 SLF4J
(然后使用像 Logback 这样的实际日志记录 实现 )。
简单吧? ;)
是的,排除 commons-logging 依赖项并添加 log4j-jcl 桥:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
</dependency>
SLF4J API 也是多余的,因为它已经是 log4j-slf4j-impl 绑定的传递依赖。
我的日志依赖项当前如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.9.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
我注意到 commons-logging.jar
出于某种原因仍在我的类路径中。我应该排除它还是不会引起任何问题?
到目前为止我没有注意到任何问题,但我仍然想知道那个 jar 是否仍然会以某种方式引起问题。
存在使用 commons-logging
的依赖项。如果它不存在,您将在他们尝试登录时收到 NoClassDefFoundErrors
。如果有可能让那些甚至 try 都没有使用依赖项的人使用依赖项,那将不是问题。不过可能性不大。
但是,如果他们使用 commons-logging
而您使用的是 SLF4J
,那就有问题了。他们登录错误的地方(从你的角度来看)。这就是日志桥开始工作的地方。他们实现了 public API 不同的日志记录框架,但将日志记录重定向到您正在使用的内容。
对于 SLF4J
有 several bridges(双向),所以不是引入 commons-logging
,而是引入 jcl-over-slf4j
。图书馆会认为他们正在使用 commons-logging
,而实际上他们正在使用 SLF4J
(然后使用像 Logback 这样的实际日志记录 实现 )。
简单吧? ;)
是的,排除 commons-logging 依赖项并添加 log4j-jcl 桥:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
</dependency>
SLF4J API 也是多余的,因为它已经是 log4j-slf4j-impl 绑定的传递依赖。