彻底搞懂混而不乱的Java日志体系
1 混而不乱的Java日志体系
1.1 Java日志发展史
1999年Ceki推出log4j日志框架,并捐给Apache。Ceki也加入Apache组织。据说Apache基金会还曾经建议Sun引入Log4j到Java的标准库中,但Sun拒绝了。
2002年Java1.4发布,Sun推出了自己的日志库JUL(Java Util Logging),其实现基本模仿了Log4j的实现。在JUL出来以前,Log4j就已经成为一项成熟的技术,使得Log4j在选择上占据了一定的优势;
2003年Apache推出了JCL(Jakarta Commons Logging)。JCL只是定义了一套日志接口(其内部也提供一个Simple Log的简单实现),支持运行时动态加载日志组件的实现,也就是说,在你应用代码里,只需调用Commons Logging的接口,底层实现可以是Log4j,也可以是Java Util Logging;
2006年,Ceki离开了Apache,回瑞典创建了QOS公司,然后先后创建了Slf4j(日志门面接口,类似于Commons Logging)和Logback(Slf4j的实现)两个项目;
2012年,Apache眼看有被Logback反超的势头,于2012-07重写了Log4j 1.x,成立了新的项目Log4j 2,2014年7月其GA版本(正式发布版)发布。
1.2 JUL
Sun公司在 jdk1.4版本增加了一个日志包java.util.logging,简称为jul,用以对抗log4j。
- JUL控制台输出使用
System.err
进行日志输出
1.3 log4j
log4j最后一次更新时间是2012年。apache已不在维护,建议使用log4j2😂
2 统一日志输出
2.1 Slf4j适配器
图片来自官网:http://www.slf4j.org/manual.html
2.2 Slf4j桥接器
图片来自官网文档:http://www.slf4j.org/legacy.html
-
jcl-over-slf4j.jar
简化从 JCL 到 SLF4J 的迁移
-
log4j-over-slf4j
简化从log4j 到 SLF4J 的迁移
-
jul-over-slf4j.jar
简化从 JUL 到 SLF4J 的迁移