当前位置: 首页 > 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 成为这三个日志框架中最先进和最快的。

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

 

相关文章:

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

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

使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器

配置虚拟机防火墙 防火墙的一系列操作需要root权限,默认是没有root密码的,所以首先需要设置root密码: sudo passwd root按提示完成root密码设置 切换到root账户 su root启用22端口并重启防火墙 firewall-cmd --permanent --add-port22/tc…...

没收到Win11 23H2正式版的推送怎么升级到23H2

没收到Win11 23H2正式版的推送怎么升级到23H2?用户反映自己没有收到Win11 23H2正式版的更新推送,又想升级为23H2版本。接下来小编给大家详细介绍不同的升级方法,帮助更多的用户完成Win11 23H2系统的更新,升级后就能体验到Win11 23…...

SpringBoot整合Redis使用基于注解的缓存

环境准备 注解 EnableCaching CacheConfig CacheConfig 提供了一种在类级别共享公共缓存相关设置的机制。 | 参数 | 作用 | | | — | — | — | | cacheNames | 使用在类上的默认缓存名称 | | | keyGenerator | 用于类的默认KeyGenerator的bean名称 | | | cacheManager | 自定…...

STM32:时钟树原理概要

在一般情况下只要在CubeIDE中将RCC下的高速时钟源设置成晶振,随后在时钟配置中把HCLK设置到最大频率(比如STM32F103的最高频率是72MHZ ),CubeIDE就会帮我们自动调节其它参数到合适的值。这样我们芯片就可以全速运行了。 一、时钟信…...

Python量化--诺贝尔奖获得者布莱克-斯科尔斯期权定价公式在日间交易中的应用

“我们不能让你在不了解一点期权定价基础知识的情况下离开麻省理工学院,”Andrew Lo 教授在麻省理工学院的 15.401 金融理论课上对学生们说道。虽然我还不是麻省理工学院的学生,但这句话给了我一个直觉:期权定价一定极其重要。由于像麻省理工学院毕业生这样的精英金融人士都…...

Redis 5 种基本数据类型详解

Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的&…...

LeetCode8-字符串转换整数(atoi)

目录 1.大神解法2.我的辣鸡解法:3.整数相加的溢出判断(chaGPT代码)4.整数相乘溢出判断(chatGPT代码) 到目前为止比较简单容易理解的一个代码: 参考链接: 🔗:【8. 字符串转换整数 String to Integer (atoi) 【LeetCode 力扣官方题解】-哔哩哔哩】 1.大神解法 累乘和…...

算法分析与设计课后练习22

设W(5,7,10,12,15,18,20)和M35,使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树...

芯片IO口不加电阻会怎样?

芯片IO口不加电阻会怎样? 可能会导致以下几个后果: 1.高电流问题,IO口没有电阻限流,当与外部设备直接连接时,就可能会导致过大的电流流过IO口,这就可能损坏IO口,引起短路或烧坏其它电路组件。像…...

智慧化工园区信息化整体解决方案:PPT全53页,附下载

关键词:智慧化工园区建设方案,智慧化工园区建设规范,智慧化工园区建设指南 一、售智慧化工园区建设背景 随着工业化、信息化和数字化进程的加速,化工园区面临着越来越多的挑战,如安全生产、环境保护、能源消耗等问题…...

深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)

概念 卷积神经网络(Convolutional Neural Networks,CNNs)是一种特殊的神经网络结构,专门用于处理具有网格状结构(如图像、音频)的数据。CNN 在计算机视觉领域取得了巨大成功,广泛应用于图像识别、物体检测、图像生成等任务。以下是 CNN 的主要理论概念: 在数学中,卷…...

竞赛选题 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...

【链表的说明、方法---顺序表与链表的区别】

文章目录 前言什么是链表链表的结构带头和不带头的区别 链表的实现(方法)遍历链表头插法尾插法任意位置插入一个节点链表中是否包含某个数字删除链表某个节点删除链表中所有关键字key清空链表所有节点 ArrayList 和 LinkedList的区别总结 前言 什么是链…...

彻底解决electron-builder安装问题与npm下载配置问题

electron-builder这个工具每次安装最少要耗费我整整一天的时间。由于只需安装一次即可使用就没去做好笔记,但有时候涉及到更新,或者换了新电脑,这个环境还得重新安装。为了避免下次安装浪费一整天时间,特此做好笔记。 虽然网上找了很多资料但都不详细,现在我们从底层来理解…...

变量命名的规则与规范

变量命名的规则与规范 变量命名的规则不能使用关键字字母须区分大小写由字母、数字、_、$组成,且不能以数字开头 变量命名的规范起名须有一定的意义遵守小驼峰命名法 变量命名的规则 不能使用关键字 在JavaScript中声明变量不能使用JavaScript的常用关键字&#x…...

【开源】基于Vue和SpringBoot的服装店库存管理系统

项目编号: S 052 ,文末获取源码。 \color{red}{项目编号:S052,文末获取源码。} 项目编号:S052,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...

怎样用css画一个圆?

要使用 CSS 画一个圆,可以使用 border-radius 属性为一个元素添加圆角,将 width 和 height 设置为相等的值,从而形成一个圆形。 以下是一个使用 CSS 画圆的简单示例: .circle {width: 100px;height: 100px;background-color: #3…...

Minikube Mac安装使用

minikube start | minikube 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 1 2 启动本地集群 minikube start --driverdocker # 等待几分钟 让docker 拉…...

人工智能-循环神经网络通过时间反向传播

到目前为止,我们已经反复提到像梯度爆炸或梯度消失, 以及需要对循环神经网络分离梯度。 例如,我们在序列上调用了detach函数。 为了能够快速构建模型并了解其工作原理, 上面所说的这些概念都没有得到充分的解释。 本节将更深入地探…...

终极指南:解密snarkOS BFT共识机制如何实现高性能ZK应用的关键突破

终极指南:解密snarkOS BFT共识机制如何实现高性能ZK应用的关键突破 【免费下载链接】snarkOS A Decentralized Operating System for ZK Applications 项目地址: https://gitcode.com/gh_mirrors/sn/snarkOS snarkOS BFT共识机制是Aleo网络中的核心创新&…...

Universal Pokemon Randomizer完全手册:3步打造你的专属宝可梦世界

Universal Pokemon Randomizer完全手册:3步打造你的专属宝可梦世界 【免费下载链接】universal-pokemon-randomizer Public repository of source code for the Universal Pokemon Randomizer 项目地址: https://gitcode.com/gh_mirrors/un/universal-pokemon-ran…...

Vrite高级功能揭秘:实时评论、版本历史和冲突解决

Vrite高级功能揭秘:实时评论、版本历史和冲突解决 【免费下载链接】vrite Open-source developer content platform 项目地址: https://gitcode.com/gh_mirrors/vr/vrite Vrite作为一款开源开发者内容平台,不仅提供了基础的内容编辑功能&#xff…...

基于Agentify框架构建大语言模型智能体:从核心原理到工程实践

1. 项目概述:从代码仓库到智能体构建平台 最近在GitHub上看到一个挺有意思的项目,叫 koriyoshi2041/agentify 。乍一看这个名字,你可能会觉得它又是一个关于“智能体”或“代理”的框架,毕竟“agentify”这个词本身就带有“使……...

推广案例分析-延迟反馈建模

1. 适用场景延迟反馈核心问题是点击后长时间才转化,样本被错误标记为负例。工业界主流用ESMM 多任务模型,联合预估点击与延迟转化;长周期场景使用生存分析处理右截尾数据;线上简易方案使用FNW 假负加权修正样本偏差。本文内容我个…...

Pydantic-Resolve:声明式数据组装解决N+1查询与API性能优化

1. 项目概述:用声明式思维解决嵌套数据组装难题如果你在开发后端API,尤其是需要聚合多个数据源的BFF(Backend for Frontend)层时,肯定遇到过这样的场景:前端需要一个包含用户详情、任务列表、评论等嵌套数据…...

GPU内核优化技术:自动化与性能提升实践

1. GPU内核优化技术背景与挑战GPU内核优化是高性能计算领域的关键技术,其核心目标是通过调整计算密集型任务的并行执行策略,最大化利用GPU的并行计算能力。现代GPU架构如NVIDIA的Ampere、Intel的Xe-HPC等,都采用了多层次并行架构,…...

构建高性能链上数据同步工具:以HyperLiquid为例的量化交易数据基础设施实践

1. 项目概述:当高频交易遇见链上数据如果你在加密货币量化交易领域摸爬滚打过一段时间,尤其是涉足过像HyperLiquid这样的高性能永续合约DEX,那你一定对“数据”这两个字有切肤之痛。行情数据、订单簿数据、账户状态、交易历史……这些信息是策…...

H公司装配线平衡改进间歇泉算法优化方法【附FlexSim仿真】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,可以私信,或者点击《获取方式》 (1)改进间歇泉喷发策略与逻辑…...

从科幻到芯片:用FPGA与MCU构建《红矮星号》数字逻辑系统

1. 项目概述:一次怀旧之旅与可编程逻辑的意外共鸣最近,我经历了一次纯粹由个人兴趣驱动的“考古”发现,它让我这个在电子设计自动化(EDA)和可编程逻辑领域浸淫了二十多年的老工程师,感到了一种久违的、孩子…...