开发者社区> 问答> 正文

为什么slf4j日志实现框架之间会产生冲突?

为什么slf4j日志实现框架之间会产生冲突?

展开
收起
芯在这 2021-12-13 22:17:22 506 0
1 条回答
写回答
取消 提交回答
  • slf4j 是为了统一不同日志框架的行为和API而产生的一套日志门面框架,它只提供API,但并不提供具体的日志解决方案实现。所以通常需要配合另一种具体的日志实现框架一起使用,比如 logback 、 log4j 。而假设MaxCompute JDBC选择的是 slf4j + logback ,而宿主应用选择的是 slf4j + log4j ,那么运行时就会出现冲突。因为通常用户在编程时会调用 slf4j 的LoggerFactory.getLogger来获取日志实例,而在该方法首次被调用时会绑定一个具体的 slf4j 的实现,该行为依赖一个叫做org.slf4j.impl.StaticLoggerBinder 的类。而该类在所有 slf4j 的日志实现框架中都会存在,所以当多套 slf4j 日志实现同时存在于classpath的时候,完全依赖于运行时classloader先加载了哪套实现的org.slf4j.impl.StaticLoggerBinder ,加载了谁就使用谁的实现以及配置,而这是带有不确定性的,这也是常见的一种JAR包冲突问题。所以如果MaxCompute JDBC带入了与宿主应用不同的 slf4j 日志实现,那么可能会造成宿主应用在运行时获取到另一套实现的日志实例,从而让宿主应用原有的日志配置失效。

    2021-12-13 22:17:57
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载