我们正在尝试构建一个Springboot入门程序,它将以编程方式创建log4j2配置,因此开发人员不必费心创建log4j2.xml文件。问题是log4j2编程API在版本之间变化。我们已经使用log4j2 2.5版测试了我们的代码,它在独立环境中可以正常工作

现在,我们试图将我们的API包含在Springboot启动程序中,以便所有springboot应用程序都可以包含此启动程序,而不必担心log4j配置。

我们面临的问题是Springboot捆绑了自己的log4j版本,而我们无法控制用户将使用哪个版本的Springboot。

有没有一种方法可以强制springboot启动器加载log4j2的2.5版本,否则我们的测试Springboot应用程序会抱怨log4j中找不到某种方法

最佳答案

您可以通过在maven pom文件或gradle文件中声明依赖版本来覆盖依赖版本。

在maven中,要包括log4j2依赖关系,您将排除默认的logback logger,然后添加以下依赖关系

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


如果检查此入门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之类的依赖管理工具支持这种类型的覆盖。

关于java - 在Spring Boot启动器中覆盖log4j2版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40390517/

10-16 16:43