[英]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
仍然在我的類路徑中,出於某種原因。 我應該排除或不會導致任何問題嗎?
到目前為止我沒有注意到任何問題,但我仍然想知道那個罐子是否仍會以某種方式引起問題。
有依賴項使用commons-logging
。 如果它不存在,那么當他們嘗試登錄時,你將獲得NoClassDefFoundErrors
。 如果有可能讓那些甚至不嘗試使用依賴項,那就不會有問題。 然而,這不太可能。
但是,如果他們使用commons-logging
而你正在使用SLF4J
,則會出現問題。 他們在錯誤的地方登陸(從你的角度來看)。 這是伐木橋開始工作的地方。 它們實現了不同日志框架的公共API,但是將日志記錄重定向到您正在使用的日志。
對於SLF4J
,有幾個橋 (兩種方式),所以不是引入commons-logging
,而是引入jcl-over-slf4j
。 當他們實際使用SLF4J
(然后使用像Logback這樣的實際日志記錄實現 )時,庫會認為他們正在使用commons-logging
。
好嗎,對吧? ;)
是的,排除commons-logging依賴項並改為添加log4j-jcl橋:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
</dependency>
SLF4J API也是冗余的,因為它已經是log4j-slf4j-impl綁定的傳遞依賴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.