簡體   English   中英

在 Springboot 啟動器中覆蓋 log4j2 版本

[英]Over-riding the log4j2 version in a Springboot starter

我們正在嘗試構建一個 Springboot 啟動器,它將以編程方式創建 log4j2 配置,因此開發人員不必費心創建 log4j2.xml 文件。 問題在於 log4j2 編程 API 隨版本變化。 我們已經使用 log4j2 2.5 版測試了我們的代碼,它在獨立環境中可以正常工作

現在我們正在嘗試將我們的 API 包含在 Springboot starter 中,以便所有 springboot 應用程序都可以包含這個 starter,而不必擔心 log4j 配置。

我們面臨的問題是 Springboot 捆綁了自己的 log4j 版本,我們無法控制用戶將使用哪個版本的 Springboot。

有沒有辦法可以強制 springboot 啟動器加載 log4j2 的 2.5 版本,否則我們的測試 Springboot 應用程序會抱怨 log4j 中找不到的某些方法

你可以通過在你的 maven pom 文件或 gradle 文件中聲明它們來覆蓋依賴版本。

在 maven 中,要包含 log4j2 依賴項,您將排除默認的 logback 記錄器,然后添加以下依賴項

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

如果查看這個starter pom的內容,可以看到里面有如下依賴

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
    <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>jcl-over-slf4j</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
    </dependency>

為了覆蓋管理版本的任何這些依賴項,您可以在 pom 文件中重新聲明這些依賴項並為其提供“版本”標記。 簡單地包括這個

 <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>

在你的 pom 文件中。 Maven 和 Gradle 等依賴管理工具支持這種類型的覆蓋。

可以方便的將log4j2依賴添加到父項目的section中,如下

    <dependencyManagement>
        <dependencies>
            ...
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>2.15.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            ...
        </dependencies>
    </dependencyManagement>

它將規定項目和模塊中的所有 log4j 2 版本。 相反,沒有必要獨立添加一些 log4j2 依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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