项目,我正在研究,正在使用几个开源框架。每个框架都使用一些日志库。 我的问题是最终的可交付成果包含log4j(在两个不同的版本中),slf4j带有logback,当然还有常见的日志记录。 我正在寻找如何减少库数量的解决方案,我可以在maven的pom文件中排除日志库并将slf4j配置为“拦截”日志消息吗?
答案 0 :(得分:3)
Slf4j在its manual中有一些关于如何做到这一点的信息。
我认为您要寻找的是从所有maven依赖项中排除log4j
和commons-logging
,然后加载log4j-over-slf4j
和jcl-over-slf4j
包。它们旨在取代log4j
和commons-logging
,并包含相应的org.apache.log4j
和org.apache.commons.logging
类,以替换Logger
,Log
和朋友。这不会减少库,但会将所有日志输出通过sl4fj
。除非你摆脱这些类的使用(显然),否则你无法减少对slf4j
包装器或原始包的依赖。
如果您正在寻找使用一个日志包,那么正确的方法可能转而使用设计为日志记录委托人的commons-logging
,然后使用挂钩的slf4j-jcl
包进入commons-logging
。
对于后代,您可以通过这种方式为需要log4j
的每个依赖项排除依赖关系。
<dependency>
<groupId>.../groupId>
<artifactId>...</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:2)
编辑更仔细地阅读您的问题。 slf4j为非slf4j项目添加了一个遗留桥。但是您仍然需要在运行时路径上提供相关的jar。这只是不重复别人工作的代价。
我的意思是考虑到你拥有所有那些基本上需要在你的jvm中链接的完全限定的符号。没有什么比一些直接伏都教更能让你了解包括依赖的库。
答案 2 :(得分:1)
看看pax-logging。它带来了几乎所有你能想到的日志框架接口(正确的软件包名称和类等......)但是它没有实现它们。相反,它将这些外观链接到log4j后端。
换句话说,您的项目继续使用其原始日志框架,但这些(透明地)移交给log4j。这样,您的日志记录输出就是一致的,并且只在一个地方配置。