我该如何设置commons-logging来使用logback?

64

我们使用 slf4j + logback,但是有一些第三方库使用 commons-logging。怎么设置才能让它们使用 logback?


14
你尝试过用jcl-over-slf4j.jar替换commons-logging.jar吗? - MahdeTo
4个回答

58

答案是不要使用commons-logging.jar,因为SLF4J旨在比commons-logging更好地完成其工作。如@MahdeTo所指,您需要使用jcl-over-slf4j.jar。

请查看来自slf4j网站的文档,了解有关从commons-logging迁移的信息.


47
你没有看到问题吗?他们正在使用使用commons logging的第三方库。 - James Roper
7
确实如此。但是你可以留下严谨的字面解释,以便理解我的意思是OP不应该使用commons-logging.jar。 OP已经明白了这一点,所以为什么还需要添加一个没有建设性的评论呢? - Spencer Kormos
4
请同时查看SLF4J的常见问题解答,其中展示了如何从Maven依赖中排除commons-logging:http://slf4j.org/faq.html#excludingJCL - koppor
1
建议修改:将“答案是不使用commons-logging”改为“答案是不使用commons-logging.jar”。 - Roger
2
所以我不想被人嘲笑“哈哈,这个回答被踩了,但是没有解释为什么”,请看上面赞同的评论来了解原因。 - Roy Truelove
显示剩余2条评论

20

我也遇到了这个问题,发现 jcl-over-slf4j.jar 确实可以解决问题。我不明白为什么 commons-logging 不能自动使用 logback,因为 commons-logging 是日志接口,而 logback 是实现,它们应该自动集成,直到我找到 this

Apache Commons Logging (JCL) 提供了一个 Log 接口,旨在既轻量又独立于其他日志工具包的抽象。它为中间件/工具开发人员提供了一个简单的日志抽象,允许用户(应用程序开发人员)插入特定的日志实现。

JCL 为其他日志工具提供了薄包装的 Log 实现,包括 Log4J、Avalon LogKit(Avalon Framework 的日志基础设施)、JDK 1.4 和 JDK 1.4 日志 API(JSR-47)的实现,用于 pre-1.4 系统。该接口与 Log4J 和 LogKit 相似。

显然,并不是所有的日志接口都可以很好地与日志实现集成。这意味着,如果你真的想使用logback,那么现在你唯一的解决方案就是使用jcl-over-slf4j.jar,因为JCL只支持Log4J, Logkit, JDK 1.4


5

2

对于那些想要使最终软件包大小更小的人; 检查您的项目的mvn dependency:tree结果,如果存在任何依赖项commons-logging,也要将其排除在外。由于jcl-over-slf4j.jar 包含了具有完全相同包结构的Log和LogFactory类,这些commons-logging jars 在你的最终软件包上将是多余的。


2
这个回答不仅适用于“所有希望保持最终软件包大小较小的人”,而且对于每个想要使用jcl-over-slf4j的人来说都是必须执行的。 - mirec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接