Tim*_*sen 5 java logging slf4j log4j2
我正在重构具有大量依赖项的 Java Web 应用程序。我想使用slf4j, withlog4j2作为底层日志记录实现。但是,该应用程序包含一些 Spring 依赖项。Spring 使用 JCL(Jakarta common logging)进行日志记录,因此它commons-logging作为传递依赖项引入。这是一个潜在的问题,因为这意味着它slf4j可能会jcl作为日志记录实现,并且 Spring 可能会以一种不受欢迎的方式在某处进行日志记录。
从slf4j 文档中,解决方案是首先commons-logging通过从 POM 中排除它来关闭它,然后使用jcl-over-slf4j来替换commons-logging. 当然,jcl-over-slf4j会将 Spring 之前进行的所有日志记录调用路由到slf4j.
我试过排除commons-logging,例如
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是,在检查 Maven 依赖关系树时,commons-logging现在仍然显示为 的依赖项json-lib,该项目具有的另一个依赖项。
很快就很明显,手动排除所有不需要的日志依赖项不会很好地扩展。该slf4j文档继续建议使用提供的范围作为选项:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是,正如this SO question所讨论的那样,这种方法仍然意味着在测试期间会出现其他日志记录框架。此外,我不清楚此提供的选项是否适用于 的所有版本commons-logging,还是每个版本都需要特定条目。如果是后者,那么这将与手动排除commons-logging所有地方一样乏味。
排除不需要的日志依赖项以slf4j在 Java 应用程序中配置的最佳实践是什么?
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |