6.统一日志框架

  • 在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。在 Java 领域里存在着多种日志框架,如 JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback 等等。

  • 日志框架的选择

  • 常见的日志框架可以被分为两类:日志门面(日志抽象层)和日志实现,如下表。

日志分类 描述 举例
日志门面(日志抽象层) 为 Java 日志访问提供一套标准和规范的 API 框架,其主要意义在于提供接口。 JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging
日志实现 日志门面的具体的实现 Log4j、JUL(java.util.logging)、Log4j2、Logback
  • 通常情况下,日志由一个日志门面与一个日志实现组合搭建而成,Spring Boot 选用 SLF4J + Logback 的组合来搭建日志系统。

  • SLF4J 是目前市面上最流行的日志门面,使用 Slf4j 可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性。

  • Logback 是 Slf4j 的原生实现框架,它与 Log4j 出自一个人之手,但拥有比 log4j 更多的优点、特性和更做强的性能,现在基本都用来代替 log4j 成为主流。

6.1 SLF4J 的使用

  • 在项目开发中,记录日志时不应该直接调用日志实现层的方法,而应该调用日志门面(日志抽象层)的方法。
  • 在使用 SLF4J 记录日志时,我们需要在应用中导入 SLF4J 及日志实现,并在记录日志时调用 SLF4J 的方法,例如:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger(HelloWorld.class);//调用 sl4j 的 info() 方法,而非调用 logback 的方法logger.info("Hello World");}
}
  • SLF4J 作为一款优秀的日志门面或者日志抽象层,它可以与各种日志实现框架组合使用,以达到记录日志的目的,如下图

从 SLF4J 官方给出的方案可以看出:

  • Logback 作为 Slf4j 的原生实现框架,当应用使用 SLF4J+Logback 的组合记录日志时,只需要引入 SLF4J 和 Logback 的 Jar 包即可;
  • Log4j 虽然与 Logback 出自同一个人之手,但是 Log4j 出现要早于 SLF4J,因而 Log4j 没有直接实现 SLF4J,当应用使用 SLF4J+Log4j 的组合记录日志时,不但需要引入 SLF4J 和 Log4j 的 Jar 包,还必须引入它们之间的适配层(Adaptation layer)slf4j-log4j12.jar,该适配层可谓“上有老下有小”,它既要实现 SLF4J 的方法,还有调用 Log4j 的方法,以达到承上启下的作用;
  • 当应用使用 SLF4J+JUL 记录日志时,与 SLF4J+Log4j 一样,不但需要引入 SLF4J 和 JUL 的对应的 Jar 包,还要引入适配层 slf4j-jdk14.jar。

这里我们需要注意一点,每一个日志的实现框架都有自己的配置文件。使用 slf4j 记录日志时,配置文件应该使用日志实现框架(例如 logback、log4j 和 JUL 等等)自己本身的配置文件。

6.2 统一日志框架(通用)

  • 通常一个完整的应用下会依赖于多种不同的框架,而且它们记录日志使用的日志框架也不尽相同,例如,Spring Boot(slf4j+logback),Spring(commons-logging)、Hibernate(jboss-logging)等等。那么如何统一日志框架的使用呢?
  • 对此,SLF4J 官方也给出了相应的解决方案,如下图。

从上图中可以看出,统一日志框架一共需要以下 3 步 :

  1. 排除应用中的原来的日志框架;
  2. 引入替换包替换被排除的日志框架;
  3. 导入 SLF4J 实现。
  • SLF4J 官方给出的统一日志框架的方案是,使用一个替换包来替换原来的日志框架,例如 log4j-over-slf4j 替换 Log4j(Commons Logging API)、jul-to-slf4j.jar 替换 JUL(java.util.logging API)等等。
  • 替换包内包含被替换的日志框架中的所有类,这样就可以保证应用不会报错,但替换包内部实际使用的是 SLF4J API,以达到统一日主框架的目的。

6.3 统一日志框架(springboot)

  • 我们在使用 Spring Boot 时,同样可能用到其他的框架,例如 Mybatis、Spring MVC、 Hibernate 等等,这些框架的底层都有自己的日志框架,此时我们也需要对日志框架进行统一。

  • 我们知道,统一日志框架的使用一共分为 3 步,Soring Boot 作为一款优秀的开箱即用的框架,已经为用户完成了其中 2 步:引入替换包和导入 SLF4J 实现。

  • Spring Boot 的核心启动器 spring-boot-starter 引入了 spring-boot-starter-logging,使用 IDEA 查看其依赖关系,如下图。

  • 从图可知,spring-boot-starter-logging 的 Maven 依赖不但引入了 logback-classic (包含了日志框架 SLF4J 的实现),还引入了 log4j-to-slf4j(log4j 的替换包),jul-to-slf4j (JUL 的替换包),即 Spring Boot 已经为我们完成了统一日志框架的 3 个步骤中的 2 步。

  • SpringBoot 底层使用 slf4j+logback 的方式记录日志,当我们引入了依赖了其他日志框架的第三方框架(例如 Hibernate)时,只需要把这个框架所依赖的日志框架排除,即可实现日志框架的统一,示例代码如下。

<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-console</artifactId><version>${activemq.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>

下一篇:SpringBoot-22-日志配置及输出

SpringBoot-21-统一日志框架相关推荐

  1. Spring Boot统一日志框架

    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析.在 Java 领域里存在着多种日志框架,如 JCL.SLF4J.Jboss-logging.jUL.log4j. ...

  2. Java项目如何统一日志框架?

    在程序运行的过程中,我们需要在重要的代码逻辑分支点,将关键的程序运行状态信息打印出来,便于我们对程序调试和观察.java项目中有成熟高性能的日志框架,很方便地集成到项目中实现我们对关键信息的打印输出. ...

  3. 12. Spring Boot统一日志框架

    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析.在 Java 领域里存在着多种日志框架,如 JCL.SLF4J.Jboss-logging.jUL.log4j. ...

  4. 详细SpringBoot教程之日志框架

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  5. hive 查看 job 日志_日均TB级数据,携程支付统一日志框架

    一.背景 支付中心作为携程集团公共部门,主要负责的业务包括交易.实名绑卡.账户.收单等,由于涉及到交易相关的资金流转以及用户实名认证,部分用户操作环节的中间数据应内控/审计要求需要长时间保存.当前研发 ...

  6. 【SpringBoot】统一日志处理

    通常情况下,日志框架是由一个抽象层 + 实现层搭建的.SpringBoot日志系统是由SLF4J + logback组成的. 抽象层有:SLF4J.jboss-logging.JCL等:  实现层有: ...

  7. 六十三、SpringBoot中的日志框架SLF4j的使用

    @Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 文章目录 SpringB ...

  8. (二):集成日志框架:springboot使用logback日志框架

    前言 项目中日志系统是必不可少的,目前比较流行的日志框架有log4j.logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复lo ...

  9. 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战

    ========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...

  10. SpringBoot整合Logback日志框架+Slf4j注解使用

    文章目录 1.基本介绍 2.使用说明 2.1 引入maven依赖 2.2 创建logback-spring.xml 3.编写一个HTTP接口 3.1 通过创建LoggerFactory实例 3.2 通 ...

最新文章

  1. 在RHEL4上安装ORACLE9.2.04
  2. 3D Button Visual Editor
  3. IBM将推NVMe存储解决方案
  4. 容大打印机ip修改工具_M1芯片版Mac无法连接打印机怎么办?
  5. 资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
  6. Java笔记-通过4个小程序对Java内存初步探究
  7. 管理者和领导者的区别_如何赢得领导者的尊重
  8. 去O入云的探索--Oracle到MySQL的迁移改造方案
  9. Azure IoT带来更高效的新能源生产和会看人脸色的无人超市
  10. JavaScript学习笔记——事件
  11. mac vscode远程服务器
  12. IDEA用maven整合ssh框架
  13. PhoneGap插件开发实例
  14. Red Hat Enterprise Linux 7 启动过程
  15. 编写自己的tomcat, 并运行tomcat源码于eclipse中
  16. 一字之差——手机中的“拼”音输入法和“注”音输入法
  17. 英文java简历模板下载_JAVA技术人员英文简历模板
  18. Windows用户账户控制详解
  19. 多系统如何共享蓝牙设备?
  20. Oracle项目管理主数据之OBS

热门文章

  1. 第127讲:Hadoop集群管理之安全模式解析及动手实战学习笔记
  2. 【三种常见架构开发模式:MVC、MVP、MVVM】
  3. 终于等到了!十位Java架构师整理的“阿里P7”养成计划
  4. uoj #311.【UNR #2】积劳成疾 dp
  5. 【个人感悟】谈谈算法工程师毕业一年的感悟
  6. 纳米孔测序仪市场现状研究分析与发展前景预测报告
  7. 初步认知Next.js中ISR/RSC/Edge Runtime/Streaming等新概念
  8. 安装配置Tomcat6教程
  9. 输入子系统代码内核代码分析
  10. js图片转base64