对于应用程序来说,日志的重要性不言而喻。而Java日志技术存在多种日志框架,就目前常用的主流的日志框架包括:Log4j,Log4j2,Commons Logging(JCL),Slf4j,Logback,JUL。
说实话,个人觉得Java的日志体系有点混乱,我曾经去研究过这个知识点,但后来有点遗忘,但用起来没有问题,但一直有想法想记录一下这个学习过程,现在终于有这个机会了,下面就从Java日志历史说起吧。
二、Java日志历史下面先来简单介绍一下常用的日志框架,做一个了解吧,后面会具体用代码来说明。
1、常用日志框架介绍Log4j :Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目,Log4j是几种Java日志框架之一。可以不需要依赖第三方的技术,直接记录日志。
Log4j2 : Apache Log4j 2是apache开发的一款Log4j的升级产品。
Commons Logging : 是Apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象方法即接口,之前叫Jakarta Commons Logging,也就是JCL,后更名为Commons Logging。JCL不能直接记录日志,需要通过第三方来记录日志。
Slf4j (Simple Logging Facade for Java) : 类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。
Logback : 一套日志组件的实现,属于slf4j阵营。(可以看做是属于SLF4J的具体实现)
JUL(Java Util Logging) :自Java1.4以来Java官方自带的一个日志记录的技术,可以直接使用。
看了上面的介绍是不是觉得比较混乱,这些日志框架之间有什么异同,都是由谁在维护?
2、Java常用日志框架历史-
1996年早期,欧洲安全电子市场项目组决定编写它自己的程序跟踪API(Tracing API)。经过不断的完善,这个API终于成为一个十分受欢迎的Java日志软件包,即Log4j。后来Log4j成为Apache基金会项目中的一员。
-
期间Log4j近乎成了Java社区的日志标准。据说Apache基金会还曾经建议sun引入Log4j到java的标准库中,但Sun拒绝了。
-
2002年Java1.4发布,Sun推出了自己的日志库JUL(Java Util Logging),其实现基本模仿了Log4j的实现。在JUL出来以前,log4j就已经成为一项成熟的技术,使得log4j在选择上占据了一定的优势。
-
接着,Apache推出了Jakarta Commons Logging(JCL),JCL只是定义了一套日志接口(其内部也提供一个Simple Log的简单实现),支持运行时动态加载日志组件的实现,也就是说,在你应用代码里,只需调用Commons Logging的接口,底层实现可以是log4j,也可以是Java Util Logging。
-
后来(2006年),Ceki Gülcü不适应Apache的工作方式,离开了Apache。然后先后创建了slf4j(日志门面接口,类似于Commons Logging)和Logback(Slf4j的实现)两个项目。
-
现今,Java日志领域被划分为两大阵营:Commons Logging(JCL)阵营和SLF4J阵营。Commons Logging在Apache大树的笼罩下,有很大的用户基数。但有证据表明,形式正在发生变化。
-
Apache眼看有被Logback反超的势头,于2012-07重写了log4j 1.x,成立了新的项目Log4j 2。Log4j 2具有logback的所有特性。
-
Log4j2与Log4j1发生了很大的变化,log4j2不兼容log4j1。
-
Commons Logging和Slf4j是日志门面,log4j和Logback则是具体的日志实现方案。可以简单的理解为接口与接口的实现,调用这只需要关注接口而无需关注具体的实现,做到解耦。
-
比较常用的组合使用方式是Slf4j与Logback组合使用,Commons Logging与Log4j组合使用。
-
Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。
我们先什么依赖都不引入,直接使用JDK自带的日志框架,即JUL,看看打出的日志是神马样子。
下面引入log4j的依赖,注意此处用的是1.X版本,我们知道,log4j需要配置文件的,我们先不加,看看是什么效果。没错,报错了,这个错误是不是很熟悉。。。。
<dependency> <groupId>log4j
关注
打赏
