Java日志框架(logback、log4j2等)介绍

2019/11/01

在项目的开发中,日志是必不可少的,Java的日志框架有很多,如何取舍呢?

一、简介

Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?

  1. JUL:Java自己的日志框架JUL(Java Util Logging)在java.util.logging下,因为对开发者不友好,使用成本太高和日志级别分类不清晰的问题,所有很少有开发者用。

  2. Log4j:JUL的缺陷给了Log4j机会,所以Log4j一经推出就迅速风靡全球。

  3. JCL:JCL是Jakarta Commons-Logging的缩写,Jakarta在这里指的是一个组织,而不是印度的首都雅加达,Jakarta,一个早期的Apache开源项目, 用于管理各个Java子项目,诸如Tomcat, Ant, Maven, Struts, JMeter, Velocity, JMeter, Commons等。2011年12月,在所有子项目都被迁移为独立项目后,Jakarta名称就不再使用了。

JCL诞生的初衷是因为Java自身的一些包用了JUL,而Log4j用户使用的有很多,那么JCL就是提供一套API来实现不同Logger之间的切换。

  1. SLF4J:SLF4J(Simple Logging Facade For Java)简单日志门面,和JCL功能类似,但JCL有一个致命的缺点就是算法复杂,出现问题难以排除,而SLF4J的诞生就是为了解决JCL的缺点。

值得一提的是SLF4J的作者就是Log4j的作者。

  1. Logback Logback是Log4j的作者的另一个开源日志组件,与Log4j相比,Logback重新了内核,使它的性能提升了很多,大约是Log4j的10倍,同时占用更小的内存,并且完整的实现了SLF4J API是你可以很方便的切换日志框架。

  2. Log4j2: Log4j2有着和Logback相同的功能,但又有自己单用的功能,比如:插件式结构、配置文件优化、异步日志等。

Log4j2是Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。

从GitHub的更新日志来看,Logback已经有半年没有更新了,而作为知名组织的Apache下的Log4j2的更新却是非常活跃的,Log4j 1.x 于2015年8月停止维护更新了。

GitHub地址

Logback:https://github.com/qos-ch/logback

log4j2:https://github.com/apache/logging-log4j2

二、选择

在这里插入图片描述

通常情况下,日志是由一个抽象层+实现层的组合来搭建的。

抽象层 实现层
JCL、SLF4J、jboss-logging JUL、log4j、log4j2、logback

SpringBoot的日志是SLF4J+Logback的组合,这个组合是目前比较流行的一组(log4j2势头越来越猛)

  • 我们在使用SpringBoot时,同样可能还会调用其他的框架,比如:Spring+Mybatis等等,这些框架中都有自己底层的日志框架在使用,所以,我们需要在引用的同时,将他们的日志框架排除掉即可,如下:

三、高级使用

日志相关配置可以直接在application.yml文件中,推荐创建单独的日志配置文件,按照相应的日志框架创建相应的配置文件,会被自动加载 在这里插入图片描述

官方推荐我们在这些命名中,使用带有spring的扩展名,它会被SpringBoot框架识别(不写的单会被日志框架识别),并且可以使用其相应的功能,比如根据环境来使用某段配置:

在这里插入图片描述

Post Directory