背景:项目中一直使用slf4j日志框架,logback日志组件作为实现记录日志,最近集成elasticsearch客户端。
官方文档,es客户端运行依赖log4j日志组件,也亲自试了,不引入log4j确实会报错;怎么办呢,不能轻易引入log4j,很容易和logback冲突 ?
还好有这么一个桥接器,可以从log4j桥接到slf4j,只需依赖log4j-to-slf4j jar包即可完美解决。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.11.0</version>
</dependency>
问题很容易解决了,是否值得思考一下,这种情况是否可以避免呢,比如说现在让你封装一个jar包给别人用,难道你要别人都加一个这样看似毫无关系的桥接器吗 ?
当然可以避免的,不需要每个使用方都用桥接器来解决问题,这也是slf4j等这类日志框架存在的意义,也是java中面向接口编程的思想所在。在封装的jar包里只使用slf4j这类日志框架的接口,至于具体实现是谁,看使用方了,使用方happy 就 ok !避免对使用方的影响,比如使用slf4j:
private final static Logger LOGGER = LoggerFactory.getLogger(xxx.class);