我正在重构一个Java Web应用程序,它有相当多的依赖项。我想用
slf4j
,与
log4j2
作为底层日志记录实现。但是,应用程序包含一些spring依赖项。spring使用jcl(jakarta common logging)进行日志记录,因此它引入了
commons-logging
作为传递依赖。这是一个潜在的问题,因为它意味着
SLF4J系列
可能会接电话
jcl
作为一个日志实现,这个spring可能以一种不受欢迎的方式在某个地方进行日志记录。
从
slf4j documentation
,解决方案是首先关闭
公用日志
把它从pom中排除,然后使用
jcl-over-slf4j
替换
公用日志
是的。当然,
JCL-over-SLF4J型
将把spring以前发出的所有日志记录调用路由到
SLF4J系列
是的。
我试过排除
公用日志
,例如
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
但是,在检查maven依赖树时,
公用日志
现在仍然显示为
json-lib
,项目具有的另一个依赖项。
很快就清楚了,手动排除所有不需要的日志依赖项不会很好地扩展。这个
SLF4J系列
文档还建议使用提供的作用域作为选项:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<scope>provided</scope>
</dependency>
但是,作为
this SO question
讨论,这种方法仍然意味着其他日志框架将在测试期间出现。另外,我也不清楚这个选项是否适用于
全部的
版本
公用日志
,或者每个版本都需要特定的条目。如果是后者,那么这就和手动排除一样乏味
公用日志
到处都是。
排除要配置的不需要的日志依赖项的最佳实践是什么
SLF4J系列
在Java应用程序中?