簡體   English   中英

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仍然在我的類路徑中,出於某種原因。 我應該排除或不會導致任何問題嗎?

到目前為止我沒有注意到任何問題,但我仍然想知道那個罐子是否仍會以某種方式引起問題。

有依賴項使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM