在SpringBoot App中增强Log4J2版本

时间:2017-11-29 04:21:49

标签: java spring maven spring-boot log4j2

尝试在Spring Boot APP中使用最新版本的Log4J2 2.10版。

我们是微服务解决方案,因此首先创建一个可重复使用的模块,其中包含下面提到的细节 -

可重用日志组件(POM片段如下) -

    <log4j.version>2.10.0</log4j.version>
    <commons-logging.version>1.2</commons-logging.version>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${commons-logging.version}</version>
    </dependency>

然后,microService项目将其称为 -

     <log4j.version>2.10.0</log4j.version>
    <commons-logging.version>1.2</commons-logging.version>
     <dependency>
        <groupId>a.b.c</groupId>
        <artifactId>reusable-logger-starter</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

无论将jar版本覆盖到2.10.0,都会显示2.7.0 -

enter image description here 问题1 - &gt;这是正常的吗?

我的工作是将下面的jar包含在MicroService的POM文件中

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>a.b.c</groupId>
        <artifactId>reusable-logger-starter</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

问题2)有没有人遇到类似问题?

2 个答案:

答案 0 :(得分:0)

在你的microService模块中,spring-boot-starter请求版本2.7,但是你的reusable-logger-starter请求了2.10.0。 Maven决定2.10。

请参阅Interpreting "omitted for conflict" in maven 2 dependency tree

对问题2的简单回答是:是的,人们已经面临这种行为。

您应该问的是如何解决这个问题,请阅读Maven BOMs以获取指导。

答案 1 :(得分:0)

解决方案是在微服务的POM中包含/覆盖log4j2的版本 -

Request method 'GET' not supported
  

依赖关系中介 - 确定在遇到多个版本的工件时将使用哪个版本的依赖关系。目前,Maven 2.0仅支持使用&#34;最近的定义&#34;这意味着它将在依赖树中使用与项目最接近的依赖项的版本。您可以通过在项目的POM中明确声明版本来保证版本。请注意,如果两个依赖项版本在依赖关系树中处于相同的深度,则直到Maven 2.0.8没有定义哪一个会赢,但是从Maven 2.0.9开始,它在声明中的顺序是:第一次宣言获胜。   &#34;最近的定义&#34;意味着所使用的版本将是依赖关系树中与项目最接近的版本,例如。如果A,B和C的依赖关系被定义为A - >; B - &gt; C - &gt; D 2.0和A - &gt; E - &gt; D 1.0,然后在构建A时将使用D 1.0,因为从A到D到E的路径更短。您可以在A中向D 2.0显式添加依赖项以强制使用D 2.0