减少项目中的日志库数量

时间:2012-05-09 12:15:31

标签: java logging

项目,我正在研究,正在使用几个开源框架。每个框架都使用一些日志库。 我的问题是最终的可交付成果包含log4j(在两个不同的版本中),slf4j带有logback,当然还有常见的日志记录。 我正在寻找如何减少库数量的解决方案,我可以在maven的pom文件中排除日志库并将slf4j配置为“拦截”日志消息吗?

3 个答案:

答案 0 :(得分:3)

Slf4j在its manual中有一些关于如何做到这一点的信息。

我认为您要寻找的是从所有maven依赖项中排除log4jcommons-logging,然后加载log4j-over-slf4jjcl-over-slf4j包。它们旨在取代log4jcommons-logging,并包含相应的org.apache.log4jorg.apache.commons.logging类,以替换LoggerLog和朋友。这不会减少库,但会将所有日志输出通过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)

Check this out

编辑更仔细地阅读您的问题。 slf4j为非slf4j项目添加了一个遗留桥。但是您仍然需要在运行时路径上提供相关的jar。这只是不重复别人工作的代价。

我的意思是考虑到你拥有所有那些基本上需要在你的jvm中链接的完全限定的符号。没有什么比一些直接伏都教更能让你了解包括依赖的库。

答案 2 :(得分:1)

看看pax-logging。它带来了几乎所有你能想到的日志框架接口(正确的软件包名称和类等......)但是它没有实现它们。相反,它将这些外观链接到log4j后端。

换句话说,您的项目继续使用其原始日志框架,但这些(透明地)移交给log4j。这样,您的日志记录输出就是一致的,并且只在一个地方配置。