一次日志框架问题解决

简介: 先介绍一个项目背景、框架使用的是公司在 Spring Boot 、Zookeeper等框架上自己封装的一个自研框架。

先介绍一个项目背景、框架使用的是公司在 Spring Boot 、Zookeeper等框架上自己封装的一个自研框架。第一次启动这个项目的时候、就报了如下的错误

网络异常,图片无法展示
|


比较令人意外的是、只有我启动时出现了这个错误。而其他开发同事并没有出现这个问题。


其实当时解决这个问题还是花费了不少的时间、第一个对这个项目不熟悉、第二个对公司自研的框架不熟悉、第三个当时没有准确地认识到问题的根本(其实是对日志框架的不熟悉)。其实第三个是最直接的原因。

Java 中日志常用有

  • Logback
  • Log4j
  • Log4j2
  • commoms-logging (JCL)
  • JDK自带的 java.util.logging (JUL)


如今使用比较多的是 Logback 和 Log4j2

网络异常,图片无法展示
|

jcl-over-slf4j、log4j-over-slf4j、jul-to-slf4j 是用来把日志框架的 API 桥接到 SLF4J API 的。这样一来、即便你的程序中使用了各种日志 API记录日志。最终都可以桥接到 SLF4J 门面 API。


而 slf4j-jcl、slf4j-log4j12、slf4j-jdk14 则是 slf4j 用来适配不同的日志框架的,作为一个适配器。因为 Logback 本身就是按照 SLF4J API 标准实现的、因此就不需要适配。

其实为啥有桥接又有适配呢、如果一些旧的项目本来使用的是 log4j、但是我现在想着的是换一个日志框架、但是改动项目中的日志相关的代码又太多了、所以这个时候我们只需要将日志桥接到 SLF4J、然后再选择另外的日志框架、比如是 Logback。但是这个时候你不能再次通过SLF4J适配到 Log4j,因为这样就会产生死循环。log4j-over-slf4j 和 slf4j-log4j12 同时存在是会有问题的。


Spring Boot 使用的日志框架是 Logback,在 spring-boot-starter模块中有个叫 spring-boot-starter-logging的模块

网络异常,图片无法展示
|


可以看到其又依赖了 logback-classic(包含了 SLF4J和Logback日志框架)和桥接的jar、log4j-to-slf4j 用于实现 Log4j2 API 到 SLF4J 的桥接,jul-to-slf4j 则是实现 java.util.logging API 到 SLF4J 的桥接

我们再来看下 zk的依赖

网络异常,图片无法展示
|


我们可以发现 zk 依赖着 log4j、slf4j-log4j12,按上面说的这不仅会导致一个死循环、还会导致 SLF4J 不知道使用 logback 还是 log4j。

那么是不是把log4j、slf4j-log4j12 都 exclusion 就可以了、对的。我当时解决开头的问题的时候就是只是移除掉了slf4j-log4j12 的。只要断了 SLF4J 和 log4j的 关联就可以了。


至于当时为啥很久没解决呢、一是怀疑自己的环境有问题、因为多个同事都没出现这个问题、就我一个。第二就是项目中用到的框架是被平台封装过的、最终找到zk依赖。第三个是没有使用 maven helper这个插件、没办法、资源限制、不能用。

就这样吧!



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 Java 数据库
若依框架----源码分析(@Log)
若依框架----源码分析(@Log)
246 0
|
4月前
|
Java API 开发者
Java日志框架整理
Java日志框架整理
62 0
|
6月前
|
SQL 监控 前端开发
tp5框架Fastadmin中的Log日志如何去用
tp5框架Fastadmin中的Log日志如何去用
190 0
|
7月前
|
设计模式 Java 程序员
日志框架Slf4j作用及其实现原理
日志框架Slf4j作用及其实现原理
76 0
|
5月前
|
XML JSON Java
最牛逼 Java 日志框架—Log4j2,性能无敌,横扫对手
Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了。不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新;logback的兄弟 slf4j 最近一个稳定版也是2017年,有点凉凉的意思。
|
4月前
|
前端开发 Java
日志框架:基于Logback实现链路追踪
日志框架:基于Logback实现链路追踪
|
27天前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
18 0
|
5月前
|
开发框架 .NET 测试技术
.NET Core 日志记录程序和常用日志记录框架
本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。
49 0
|
2月前
|
监控 前端开发
QGS
|
3月前
|
Java 数据库连接 Apache
Springboot日志框架logback与log4j2
Springboot日志框架logback与log4j2
QGS
38 0

热门文章

最新文章