当前位置: 首页 > news >正文

日志门面slf4j与常用的日志框架Log4j,Logback和Log4j2

slf4j 是众多日志框架接口的集合(俗称日志门面),它不负责具体的日志实现,只在编译时负责寻找合适的日志框架进行绑定,各日志框架通过扩展jar包中的适配器与slf4j建立适配 SLF4J可以和Log4j、Logback、Log4j2、JUL等日志框架配合使用,这里主要讲一下常用的几种

Logback 、 Log4j、Log4j2

首先看看日志级别的差别:

Logback、Log4j和Log4j2都支持类似的日志级别,但是它们的具体实现略有不同:

  1. Logback的日志级别(按照从低到高排序)为:TRACE、DEBUG、INFO、WARN、ERROR。Logback还提供了一个OFF级别,用于禁用所有日志记录。

  2. Log4j的日志级别(按照从低到高排序)为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL。但是Log4j还提供了一个ALL级别,用于启用所有日志记录。

  3. Log4j2的日志级别(按照从低到高排序)为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。Log4j2的日志级别与Log4j大体相同,但是它还添加了一个OFF级别,用于完全禁用日志记录。

可以看到常见的ERROR、WARN、INFO、DEBUG,这三者都是支持的。 

看看各自需要引入的jar

  • slf4j + logback: slf4j-api.jar + logback-classic.jar + logback-core.jar
  • slf4j + log4j: slf4j-api.jar + slf4j-log412.jar + log4j.jar
  • slf4j + jul: slf4j-api.jar + slf4j-jdk14.jar
  • 也可以只用slf4j无日志实现:slf4j-api.jar + slf4j-nop.jar

注意到这里没有log4j2依赖jar的关系,和log4j2配合需要导入log4j2的log4j-api.jar、log4j-core.jar和桥接包log4j-slf4j-impl.jar。

所谓的桥接包,就是实现StaticLoggerBinder类,用来连接slf4j和日志框架。因为log4j和log4j2刚开始没有StaticLoggerBinder这个类,为了不改变程序结构,只能重新写一个新的jar来实现StaticLoggerBinder。而logback出现slf4j之后,于是在logback本身的jar中实现了StaticLoggerBinder,所以就不需要桥接包。

按出现顺序逐个分析一下

Log4j

Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。

2015 年 8 月 5 日,该项目管理委员会宣布 Log4j 1.x 已达到使用寿命。 建议用户使用 Log4j 1 升级到 Apache Log4j 2。

Logback

logback 是由 log4j 创始人设计的又一个开源日志组件,作为流行的 log4j 项目的后续版本,从而替代 log4j。

Logback 的体系结构足够通用,以便在不同情况下应用。 目前,logback 分为三个模块:logback-core,logback-classic和logback-access。

  • logback-core:模块为其他两个模块的基础。
  • logback-classic:模块可以被看做是log4j的改进版本。此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。
  • logback-access:模块与 Servlet 容器(如 Tomcat 和 Jetty)集成,以提供 HTTP 访问日志功能。

Log4j2

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

与 Logback 一样,Log4j2 提供对 SLF4J 的支持,自动重新加载日志配置,并支持高级过滤选项。 除了这些功能外,它还允许基于 lambda 表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。

所有这些功能使 Log4j2 成为这三个日志框架中最先进和最快的。

后面有空在讲讲标签配置的一些差异和=注意事项

 

http://www.lryc.cn/news/238251.html

相关文章:

  • 使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器
  • 没收到Win11 23H2正式版的推送怎么升级到23H2
  • SpringBoot整合Redis使用基于注解的缓存
  • STM32:时钟树原理概要
  • Python量化--诺贝尔奖获得者布莱克-斯科尔斯期权定价公式在日间交易中的应用
  • Redis 5 种基本数据类型详解
  • LeetCode8-字符串转换整数(atoi)
  • 算法分析与设计课后练习22
  • 芯片IO口不加电阻会怎样?
  • 智慧化工园区信息化整体解决方案:PPT全53页,附下载
  • 深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)
  • 竞赛选题 目标检测-行人车辆检测流量计数
  • 【链表的说明、方法---顺序表与链表的区别】
  • 彻底解决electron-builder安装问题与npm下载配置问题
  • 变量命名的规则与规范
  • 【开源】基于Vue和SpringBoot的服装店库存管理系统
  • 怎样用css画一个圆?
  • Minikube Mac安装使用
  • 人工智能-循环神经网络通过时间反向传播
  • Delphi 取消与设置CDS本地排序
  • 智能门禁刷脸照片格式gif、bmp,png转换,转换base64
  • 听GPT 讲Rust源代码--src/librustdoc
  • hosts 配置本地映射不生效
  • Linux难学?大神告诉你,Linux到底该怎么自学!
  • GAMES101—Lec 05~06:光栅化
  • R语言——taxize(第三部分)
  • 用于神经网络的FLOP和Params计算工具
  • CUDA核函数,如何设置grid和block即不超过大小又能够遍历整个volume
  • 【Linux】软连接和硬链接:创建、管理和解除链接的操作
  • Matlab群体智能优化算法之海象优化算法(WO)