Ind*_*jee 7 java spring log4j2 spring-boot
我们正在尝试构建一个 Springboot 启动器,它将以编程方式创建 log4j2 配置,因此开发人员不必费心创建 log4j2.xml 文件。问题在于 log4j2 编程 API 随版本的不同而变化。我们已经使用 log4j2 2.5 版测试了我们的代码,它在独立环境中正常工作
现在我们尝试将我们的 API 包含在 Springboot 启动器中,以便所有 springboot 应用程序都可以包含此启动器,而不必担心 log4j 配置。
我们面临的问题是 Springboot 捆绑了自己的 log4j 版本,我们无法控制用户将使用哪个版本的 Springboot。
有没有一种方法可以强制 springboot 启动器加载 log4j2 2.5 版本,否则我们的测试 Springboot 应用程序会抱怨 log4j 中找不到某些方法
在父项目的section中添加log4j2依赖很方便,如下Run Code Online (Sandbox Code Playgroud)<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 依赖项。
检查这个问题帖子
如果项目的log4j依赖仅来自spring-boot-starter-log4j2,则有明确的设置方式,参考 spring博客
Run Code Online (Sandbox Code Playgroud)<properties> <log4j2.version>2.17.0</log4j2.version> </properties>
您可以通过在 maven pom 文件或 gradle 文件中声明依赖项版本来覆盖它们。
在 Maven 中,要包含 log4j2 依赖项,您将排除默认的 logback 记录器,然后添加以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果你检查这个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>
Run Code Online (Sandbox Code Playgroud)
为了覆盖管理版本的任何依赖项,您可以在 pom 文件中重新声明这些依赖项并为其提供“版本”标记。只需包括这个
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.15</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在你的 pom 文件中。Maven 和 Gradle 等依赖管理工具支持这种类型的覆盖。
归档时间: |
|
查看次数: |
15831 次 |
最近记录: |