Logback原理及应用详解(九)
本系列文章简介:
在软件开发的过程中,日志记录是一项至关重要的功能。它不仅帮助开发者在开发阶段追踪代码的执行流程和调试问题,还在生产环境中扮演着监控应用运行状态、记录关键业务信息和排查故障的重要角色。随着软件系统的日益复杂和分布式架构的广泛应用,对日志记录的需求也变得越来越高。
在众多Java日志框架中,Logback凭借其高性能、灵活的配置以及丰富的特性脱颖而出,成为许多Java项目的首选日志解决方案。Logback不仅继承了其前身Log4j的诸多优点,还在性能、易用性和扩展性上进行了显著的改进。它作为SLF4J(Simple Logging Facade for Java)的一个实现,提供了统一的日志记录接口,使得开发者可以轻松地切换不同的日志框架,而无需修改代码中的日志记录语句。
本系列文章旨在深入剖析Logback的内部机制和工作原理,帮助大家从理论到实践全面掌握Logback的使用方法和技巧。我们将从Logback的架构与原理入手,详细介绍其核心组件和日志记录流程;接着,通过丰富的配置示例和高级配置技巧,展示如何灵活配置Logback以满足不同场景下的日志记录需求;然后,我们将探讨Logback的性能优化策略,帮助大家提升日志记录的性能和效率。
通过本系列文章的学习,大家将能够深刻理解Logback的工作原理和优势,掌握其配置和使用方法,并能够在实际项目中灵活运用Logback进行日志记录和管理。无论是对于正在学习Java日志框架的初学者,还是对于已经有一定经验的开发者来说,本系列文章都将是您宝贵的指南!
欢迎大家订阅《Java技术栈高级攻略》专栏(PS:近期会涨价),一起学习,一起涨分!
目录
一、引言
二、Logback的配置
2.1 配置文件格式
2.2 基本配置元素
2.3 高级配置技巧
2.3.1 动态配置更新
2.3.2 异步日志记录(AsyncAppender)
2.3.3 SiftingAppender的使用
2.3.4 配置文件的分割与合并
三、Logback的性能优化
3.1 日志级别的合理选择
3.2 异步日志记录的使用
3.3 避免在日志记录中进行复杂计算
3.4 参数化日志记录
3.5 滚动日志文件的优化
四、Logback的应用实例
五、Logback的故障排查与调试
六、结语
一、引言
Logback是一个高性能、灵活且可扩展的Java日志框架,由log4j的创始人Ceki Gülcü设计。它是SLF4J(Simple Logging Facade for Java)的一个实现,并且被设计为log4j的继任者和改良版。Logback旨在提供更快的日志记录速度、更小的内存占用以及更丰富的功能特性。
本文将跟随《Logback原理及应用详解(八)》的进度,继续介绍Logback。希望通过本系列文章的学习,您将能够更好地理解Logback的内部工作原理,掌握Logback的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Logback的潜力,为系统的高效运行提供有力保障。
二、Logback的配置
2.1 配置文件格式
详见《Logback原理及应用详解(五)》
2.2 基本配置元素
2.2.1 <configuration>
详见《Logback原理及应用详解(六)》
2.2.2 <appender>
详见《Logback原理及应用详解(七)》
2.2.3 <encoder>
详见《Logback原理及应用详解(八)》
2.2.4 <filter>
详见《Logback原理及应用详解(八)》
2.2.5 <logger>
Logback的<logger>
元素是配置中用于定义日志记录器的关键组件。<logger>
元素允许开发者为应用程序中的特定包(package)或类(class)设置日志级别,并指定日志的输出目的地(通过<appender-ref>
元素引用<appender>
)。以下是关于<logger>
元素的基本配置和属性的详细解释:
基本属性
-
name(必需):指定受此
<logger>
约束的某一个包或具体的某一个类。这个属性是必需的,因为它用于唯一标识日志记录器。 -
level(可选):设置日志的打印级别。级别的大小写无关,常用的级别包括TRACE、DEBUG、INFO、WARN、ERROR,以及ALL(所有级别)和OFF(关闭日志)。如果未设置此属性,那么当前
<logger>
将会继承其上级(通常是根<root>
)的日志级别。 -
additivity(可选):指定是否向上级
<logger>
传递打印信息。默认值为true,表示将日志信息同时传递给上级<logger>
(如果有的话)。如果设置为false,则不会将日志信息传递给上级<logger>
。
子元素
- <appender-ref>:
<logger>
元素可以包含零个或多个<appender-ref>
元素,每个<appender-ref>
元素通过ref
属性引用一个<appender>
。这样,<logger>
就可以将日志输出到指定的一个或多个目的地。
示例配置
以下是一个包含<logger>
元素的Logback配置文件(logback.xml)的示例:
<configuration> <!-- 定义appender --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 定义logger --> <logger name="com.example.myapp" level="DEBUG"> <appender-ref ref="STDOUT" /> </logger> <!-- 定义root logger --> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
在这个示例中,定义了一个名为STDOUT
的ConsoleAppender
,它将日志输出到控制台。然后,定义了一个<logger>
元素,其name
属性为com.example.myapp
,level
属性为DEBUG
,并通过<appender-ref>
引用了STDOUT
。这意味着com.example.myapp
包及其子包下的所有类都将使用DEBUG级别的日志记录,并且日志将输出到控制台。最后,定义了一个根<root>
日志记录器,其默认级别为INFO,也引用了STDOUT
作为输出目的地。
总结
<logger>
元素是Logback配置中用于定义特定包或类的日志记录器的关键组件。通过为不同的包或类设置不同的日志级别和输出目的地,开发者可以灵活地控制日志的输出,以满足不同的调试和监控需求。
2.2.6 <root>
在Logback日志框架中,<root>
元素是一个基本且重要的配置元素,它用于定义根日志级别以及关联一个或多个Appender。以下是关于<root>
元素的基本配置和作用的详细解释:
1、<root>
元素的作用
- 定义根日志级别:
<root>
元素通过level
属性定义了根日志级别。根日志级别是所有日志记录器的默认级别,如果没有为特定的日志记录器指定级别,则会使用根日志级别。 - 关联Appender:
<root>
元素可以包含一个或多个<appender-ref>
子元素,用于将根日志级别与具体的Appender相关联。这样,符合根日志级别条件的日志消息就会被发送到这些Appender指定的目的地(如控制台、文件等)。
2、<root>
元素的配置
- level属性:
- 用于指定根日志级别。
- 可选值包括:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。级别由低到高,TRACE 是最详细的级别,而 OFF 表示禁用日志记录。
- 默认值通常是DEBUG,但可以根据实际需要进行调整。
- appender-ref子元素:
- 用于引用之前定义的Appender。
- 每个
<appender-ref>
元素通过ref
属性指定Appender的名称。 - 可以包含零个或多个
<appender-ref>
元素,以将根日志级别与多个Appender相关联。
3、配置示例
以下是一个简单的Logback配置示例,展示了<root>
元素的基本用法:
<configuration> <!-- 定义Appender --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 定义根日志级别和关联的Appender --> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
在这个示例中,<root>
元素将根日志级别设置为INFO,并通过<appender-ref>
元素将根日志级别与名为STDOUT的Appender相关联。因此,所有INFO级别及以上(WARN、ERROR等)的日志消息都会被发送到控制台。
4、注意事项
<root>
元素是Logback配置文件的必选部分,用于定义全局的日志级别和Appender关联。- 在实际配置中,可以根据需要调整根日志级别和关联的Appender,以满足不同的日志记录需求。
- Logback的配置文件非常灵活,支持多种高级特性和自定义配置,但基本配置元素如
<root>
、<appender>
和<logger>
等是理解和使用Logback的基础。
2.3 高级配置技巧
2.3.1 动态配置更新
详见《Logback原理及应用详解(十)》
2.3.2 异步日志记录(AsyncAppender)
详见《Logback原理及应用详解(十)》
2.3.3 SiftingAppender的使用
详见《Logback原理及应用详解(十一)》
2.3.4 配置文件的分割与合并
详见《Logback原理及应用详解(十一)》
三、Logback的性能优化
3.1 日志级别的合理选择
详见《Logback原理及应用详解(十二)》
3.2 异步日志记录的使用
详见《Logback原理及应用详解(十二)》
3.3 避免在日志记录中进行复杂计算
详见《Logback原理及应用详解(十三)》
3.4 参数化日志记录
详见《Logback原理及应用详解(十三)》
3.5 滚动日志文件的优化
详见《Logback原理及应用详解(十三)》
四、Logback的应用实例
详见《Logback原理及应用详解(十四)》
五、Logback的故障排查与调试
详见《Logback原理及应用详解(十五)》
六、结语
文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!
相关文章:
Logback原理及应用详解(九)
本系列文章简介: 在软件开发的过程中,日志记录是一项至关重要的功能。它不仅帮助开发者在开发阶段追踪代码的执行流程和调试问题,还在生产环境中扮演着监控应用运行状态、记录关键业务信息和排查故障的重要角色。随着软件系统的日益复杂和分布…...
SpringBoot 禁用RabbitMQ自启动
1.背景 在实际开发中,项目中使用了mq,但是在测试的时候用不到mq,或者测试环境的mq挂了, 希望能正常启动项目 2.步骤 这很简单在配置文件中增加一个配置就可以了 spring:autoconfigure:exclude: org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 表示启…...

unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)
1创建UnityHelper.cs using UnityEngine.Events; using UnityEngine.EventSystems;public class UnityHelper {/// <summary>/// 简化向EventTrigger组件添加事件的操作。/// </summary>/// <param name"_eventTrigger">要添加事件监听的UI元素上…...

Scrapy 爬取旅游景点相关数据(五)
本期内容:(1)爬取日本其他城市数据存入数据库(2)爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的,因为数据样本量少嘛,本期来爬取其他城市的景…...
程序员纯粹八股文的危害有哪些,应该如何来解决?
“八股文”这个词在程序员面试的上下文中通常指的是那些被广泛讨论、反复练习的问题和答案,它们往往围绕着一些经典的技术知识点,例如算法、数据结构、设计模式等。这些知识在面试中被频繁提及,以至于应聘者经常会提前准备并背诵这些答案&…...

LabVIEW操作系列1
系列文章目录 我的记录: LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…...

【前端 09】JavaScript中的对象与JSON
JavaScript中的对象与JSON 在JavaScript中,对象和JSON(JavaScript Object Notation)是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…...
C# 字符串罗马数字123转汉字一二三
要将字符串 "123" 转换为 "一二三",可以通过以下几种方法来实现。 1. 使用映射字典 可以创建一个映射字典,将数字字符映射到对应的中文数字,然后遍历原始字符串进行替换: using System; using System.Coll…...
红杉资本视角:大公司在AI领域的投资策略与市场影响
在人工智能(AI)的快速发展浪潮中,大型科技公司如谷歌、Meta等正在积极投资,以确保在未来技术竞争中占据有利地位。红杉资本等投资机构对此现象进行了深入分析,探讨了大公司在AI领域的投资策略及其对市场的影响。本文将…...
CI/CD学习之路
CI/CD之路 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg4NDg0MjQ0MQ&actiongetalbum&album_id3433192036428447744&scene173&subscene&sessionidsvr_0b1e7fe1d6b&enterid1721879847&from_msgid2247485821&from_itemidx1&count3&am…...

IP 泄露: 原因与避免方法
始终关注您的IP信息! 您的IP地址不仅显示您的位置,它包含几乎所有的互联网活动信息! 如果出现IP泄漏,几乎所有的信息都会被捕获甚至非法利用! 那么,网站究竟如何追踪您的IP地址?您又如何有效…...

深⼊理解指针(1)
1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 1. 内存和地址 1.1 内存 计算机内存空间如何高效率的管理? 也是把内存划分为⼀个个的内存单元,每个…...

Photoshop 2023:创意无限的图像编辑神器
Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件,为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具,如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…...

高校是需要AIGC 实验室还是大数据人工智能实验室呢
AIGC(人工智能与图形计算)实验室和大数据人工智能实验室虽然都隶属于人工智能的范畴,但它们的关注点、研究方向和具体应用领域有所不同。 我们分别从研发方向、技术侧重、应用领域、研究工具和方法等方面去分析两者的区别,希…...

Nginx系列-12 Nginx使用Lua脚本进行JWT校验
背景 本文介绍Nginx中Lua模块使用方式,并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段,经过JWT校验并提取id和name信息,设置到http请求头中发向后段服务器。 默认情况下,Nginx自身不携带lua模块࿰…...

数据库设计三范式
目录 第一范式 第二范式 第三范式 数据库的设计范式,即数据库设计的原则; 在设计数据库时尽量遵守这三个条件,因为在实际的设计中,根据要求是空间换时间还是时间换空间来遵守范式; 第一范式 每一张表都必须有主键…...

VirtualBox创建共享磁盘
VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI(VirtualBox 磁盘映像)】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…...

2024年中职云计算实验室建设及云计算实训平台整体解决方案
随着信息技术的飞速发展,云计算作为新一代信息技术的核心,正逐步渗透到各行各业,成为推动数字化转型的重要力量。为了适应这一趋势,中职教育作为技能型人才培养的重要阵地,亟需加强云计算实验室建设与云计算实训平台的…...

[C++] C++11新增
一、列表初始化 C98: 在C98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。 struct Simple1 {int _a;int _b; };//C98 int main() {int a1[] { 1,2,3,4,5,6 };int a2[7] { 0 };//本质是类型转换(构造拷贝构造 -> 优化 …...

802.11 wireshark 抓包
80211 wireshark 抓包 前言配置 monitor软件配置wireshark 操作 前言 本人习惯使用 Omnipeek 抓包分析,所以 wireshark 的实验只讲到抓包完成。 Windows 环境采用 wireshark 抓包是比较麻烦的,因为支持在 Windows 环境中支持抓包的网卡并不多࿰…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...