您当前的位置: 首页 >  Java

详细拆解Java日志框架

发布时间:2020-10-16 09:57:36 ,浏览量:6

一、引言

对于应用程序来说,日志的重要性不言而喻。而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的所有特性。

3、Java常用日志框架之间的关系
  • Log4j2与Log4j1发生了很大的变化,log4j2不兼容log4j1。

  • Commons Logging和Slf4j是日志门面,log4j和Logback则是具体的日志实现方案。可以简单的理解为接口与接口的实现,调用这只需要关注接口而无需关注具体的实现,做到解耦。

  • 比较常用的组合使用方式是Slf4j与Logback组合使用,Commons Logging与Log4j组合使用。

  • Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。

三、日志框架代码示例 1、JUL(java.util.logging)

我们先什么依赖都不引入,直接使用JDK自带的日志框架,即JUL,看看打出的日志是神马样子。 在这里插入图片描述

2、log4j

下面引入log4j的依赖,注意此处用的是1.X版本,我们知道,log4j需要配置文件的,我们先不加,看看是什么效果。没错,报错了,这个错误是不是很熟悉。。。。

<dependency> <groupId>log4j            
关注
打赏
1688896170
查看更多评论

暂无认证

  • 6浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0530s