5

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

4

3 回答 3

4

Slf4j 在其手册中有一些关于如何做到这一点的信息。

我认为您正在寻找的是从您的所有 Maven 依赖项中排除并加载log4j包。它们旨在替换and并且包含适当的和类来替换, , 和朋友。这不会减少库,但会将所有日志输出通过. 除非您摆脱对这些类的使用(显然),否则您无法减少对包装器或原始类的依赖。commons-logginglog4j-over-slf4jjcl-over-slf4jlog4jcommons-loggingorg.apache.log4jorg.apache.commons.loggingLoggerLogsl4fjslf4j

如果您希望使用一个日志记录包,那么正确的方法可能是切换到使用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>
于 2012-05-09T13:24:14.937 回答
2

看一下这个

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

我的意思是考虑一下,您拥有所有那些本质上需要在 jvm 中链接的完全限定符号。一些简单的伏都教可以让你到处走走,包括依赖库。

于 2012-05-09T12:19:55.337 回答
1

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

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

于 2012-05-09T12:24:05.850 回答