关于 slf4j 和 log4j 使用上的一些体验

工作中的问题

项目中使用的log4j2, 引入了同事写的依赖包,使用的是slf4j搭配log4j。测试时发现,原本程序中的log正常出现,但依赖包里的log完全没有,于是稍微学习了一下 slf4j 的知识。

图片转自 https://unsplash.com

slf4j的绑定

slf4j的好处一搜一大堆。总的来说,它是各种log工具的具体实现上面的一个抽象层。用抽象层的好处就是可以解耦合。

既然slf4j本身只是抽象层,它自己并不对log功能进行实现,这就意味着它必须和一个负责实现的log工具搭配使用。在我们的项目中使用的是log4j

和同组的同事沟通之后发现,原来我们的主程序使用的log工具最近从log4j升级到了log4j2,设置文件也从log4j.properties变成了log4j2.properties

检查程序的启动log,又发现了如下WARNING:

SLF4J: Class path contains multiple SLF4J bindings.

log4j和log4j2同时出现在了程序的依赖中,显然这就是问题所在了。

于是我打开IntelliJ的依赖图生成工具,将原本包含在依赖包中的slf4j-log4j12删除掉。再加上对应版本的slf4jlog4j12之间的binding依赖。问题顺利解决。

在这个例子中我们也可以发现使用slf4j的好处。在主程序已经升级到log4j2的情况下,依赖包的代码完全不需要进行更改,只需要对maven的pom文件进行修改,就可以顺利使用主程序的log工具。如果依赖包中直接使用的是log4j的实现的话,我们恐怕不得不在 同时在主程序中使用两个log工具对依赖包的代码进行修改 之间选择其一了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 历史 log4j可以当之无愧地说是Java日志框架的元老,1999年发布首个版本,2012年发布最后一个版本,20...
    kelgon阅读 10,182评论 3 53
  • 前言 最近学习开java web服务器开发,开始学习java,处理业务逻辑,但对其中的日志比较好奇,之前没怎么接触...
    九风萍舟阅读 3,310评论 1 6
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,925评论 6 342
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,716评论 0 3