Java的日志生态了解

一、日志概述


什么是日志?

一个项目它是各个模块组合而成的,在项目的运行过程中,假如出现错误我们怎么定位?日志就可以帮助这样的环境。日志就是输出记录项目在执行时的各种操作,帮助开发人员查看信息、定位问题等等。

日志有什么作用?

  • 状态监控:记录程序运行情况,
  • 问题追踪:出现问题方便排错和调试
  • 优化性能:为系统性能优化提供判断依据
  • 安全审计:判断一些非法攻击,非法调用等

一个很简单的问题,在我刚接触日志的时候,通常回去想System.out.print()不久能够输出东西到控制台吗?为什么还需要日志呢?

事实上在我们刚开始学习编写的一些小项目,直接输出信息到控制台当然可以。但是但一个项目大的时候print()就不够用了。日志能够按不同的等级输出日志信息,同时还能够选择输出控制台还是文件,我们在生产环境中可不适合在控制台中输出日志。

二、日志的框架

我们都知道日志的作用了,但市面上的日志框架特别多,到底怎么选,当你了解各个日志之间的区别就知道了。

我们常使用的日志工具有JUL(Java Util Log)、JCL(Commons Logging)、Log4j、SLF4J、Logback、Log4j2 等等。

按照依赖倒转原则,我们应用应该依赖日志的抽象而不是实现,而日志通常接口(门面)和实现两种。与我们的依赖倒转原则契合,目的很简单就是为了方便我们修改日志的实现时项目中的代码无需修改,毕竟依赖的是接口嘛。

门面:

  • JCL
  • SLF4J (常用)
  • log4j-api(它是Log4j2分离设计中的结构部分)

实现:

  • Log4j (以前的大哥)
  • JUL
  • Logback
  • log4j-core(来自Log4j2 )

image-20210202082803058

在我们使用的时候就是**(接口+日志)**这样去使用

举一个例子:我们使用Log4j+slf4j通常导入:

log4j 作为日志产品实现
slf4j-api 作为接口统一操作
slf4j-log4j12 由于本身上面两个包是不能结合使用,通过适配器模式导入这个包就可以使用。

Log4j

log4j应该说到日志就能想到这个吧。这还是apache最早出现作为日志应用最广泛的工具。成为java使用日志上的标准。Ceki Gülcü是Log4j的主要贡献者。

JUL

在当时SUN公司认为他才是明正严顺的Java的大哥,所在在JDK1.4增加了JUL(java.util.logging)。

JCL(Jakarta Commons Logging)

由于出现了两个日志工具,日志工具之间不互通,对开发造成一些麻烦。这时Apache 开源社区提供了一个日志框架作为日志的抽象,叫 commons-logging。想一统日志抽象层。最后完成了兼容主流的日志实现。基本一统日志界。

Slf4j(Simple Logging Facade for Java)

Ceki Gülcü认为JCL不够好,所以弄出一套更加优雅的日志接口Slf4j。很明显,Slf4j就是对标JCL。由于Slf4j不能直接与原来的JUL和Log4j直接使用,Ceki Gülcü编写了桥接包使用适配器模式。实现(接口+日志)共同使用。就是:

image-20210202185406603

Logback

Logback 是 Slf4j 的原生实现框架,Logback出自Ceki Gülcü之手,是正统的Slf4j无需桥架包直接连接的日志工具。它比log4j性能更好,执行更快,优化好。

Log4j2

在2012年,Apache推出了全新的项目Log4j2,虽然名字想Log4j,但是Log4j2的内部代码架构与Log4j完全不同。Log4j2几乎涵盖Logback所有的特性,这不就是对着干吗?Log4j2搞了分离的设计,分化成log4j-api和log4j-core,这个log4j-api也是日志接口,log4j-core是日志产品。

最后

了解到Java的日志之后,当然需要实际动动手,编写下代码上的文件,这样才能真正理解Java中的日志,下一篇我会带来一篇基于SpringBoot2.6的日志实战。任何系统性的应用都需要日志,日志很重要,一定要学习好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值