【Java杂记】日志:Java日志体系,从应用场景到发展历史

在实际应用中,日志是最重要的一个组件。它可以为系统提供错误以及日常的定位,也可以对访问的记录进行跟踪。当然,在很多大型的互联网应用中,基于日志的收集以及分析可以了解用户的用户画像,比如兴趣爱好、点击行为。

1.日志框架应用场景

某项目开发人员张三,为了了解项目运行情况,在我们代码中加入了 System.out.println("*****") 来记录日志。

有一天,项目经理觉得通过这种 System.out.println("*****") 的方式很捞,要他把代码中的,System.out.println给去掉,但是过了几天之后,项目出问题了,查询很棘手又没有日志,所以经理又要求他把 System.out.println 加上。。。。。。。。然后又去掉。。。。。又加上。。。。。。

所以张三为了解决 System.out.println("****") 比较捞的情况,就写了一个记录日志的 jar 包名称叫 zs-logging.jar 用来替代 System.out.println("*****")。

因为张三是一个爱专研的人,后来又想出了一写比较牛的点子。比如日志异步记录,日志归档。。。给它起名叫 zs-logging-good.jar,然后把项目中原来的 zs-logging.jar 卸下来安装新的框架 zs-logging-good.jar。

但是由于二种方式实现的接口可能不一样,需要修改代码中的日志打印类。这种情况这么办?

此时张三想到了一个好办法,我把 zs-logging.jar 和 zs-logging-good.jar 的功能都抽取出来形成一个门面 zs-logging-intf.jar(也就是我们的接口),然后在两个日志框架中实现不同的功能。这样我的业务代码中直接使用的就是 zs-logging-intf.jar 的方法,最后再根据需要导入zs-logging.jar 或者 zs-logging-good.jar。

2.常见的日志框架

可能是太过于常见了,所以使得大家很少关注,只是要用到的时候复制粘贴一份就行,甚至连日志配置文件中的配置语法都不清楚。另外一方面,Java 中提供的日志组件太多了,一会儿log4j,一会儿logback,一会儿又是log4j2,不清楚其中的关联。

Java 中常用的日志框架: Log4j、Log4j 2、Commons Logging、Slf4j、Logback、Jul(Java Util Logging)

3.日志体系的发展历史

最早的日志组件是Apache基金会提供的 Log4j,log4j 能够通过配置文件轻松的实现日志系统的管理和多样化配置, 所以很快被广泛运用。也是我们接触得比较早和比较多的日志组件。它几乎成了Java社区的日志标准。

据说 Apache 基金会还曾经建议 Sun 引入 Log4j 到 java 的标准库中,但Sun拒绝了。 所以 Sun 公司在 java1.4 版本中,增加了日志库JUL(Java Util Logging)。其实现基本模仿了 Log4j 的实现。

在JUL出来以前,Log4j 就已经成为一项成熟的技术,使得 Log4j 在选择上占据了一定的优势。Sun推出JUL后,有一些项目使用JUL,也有一些项目使用 log4j,这样就造成了开发者的混乱,因为这两个日志组件没有关联,所以要想实现统一管理或者替换就非常困难。怎么办呢?

我们可以抽象出一个接口层,对每个日志实现都适配,这样这些提供给别人的库都直指使用抽象层即可。

这个时候又轮到 Apache 出手了,它推出了一个 JCL(Java Commons Logging) 组件,JCL 只是定义了一套日志接口 (其内部也提供一个 Simple Log 的简单实现),支持运行时动态加载日志组件的实现。也就是说,在你应用代码里, 只需调用 Commons Logging 的接口,底层实现可以是 Log4j,也可以是Java Util Logging。由于它很出色的完成了主流日志的兼容,所以基本上在后面很长一段时间,是无敌的存在。连spring也都是依赖 JCL 进行日志管理。

但是故事并没有结束。原Log4J的作者,它觉得 Apache Commons Logging 不够优秀,所以他想搞一套更优雅的方案,于是 Slf4j 日志体系诞生了,slf4j 实际上就是一个日志门面接口,它的作用类似于 Commons Loggins。 并且他还为 Slf4j 提供了一个 日志的实现- Logback

另外,还有一个 log4j2 是怎么回事呢? 因为 slf4j 以及它的实现 Logback 出来以后,很快就赶超了原本 apache 的 log4j 体系,所以 apache 在 2012 年重写了 log4j, 成立了新的项目 Log4j2

总的来说,日志的整个体系分为日志框架和日志系统

  • 日志框架:JCL / Slf4j
  • 日志系统:Log4j、JUL、Logback、Log4j2

而在我们现在的应用中,绝大部分都是使用 slf4j 作为门面, 然后搭配logback或者log4j2日志系统

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A minor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值