Logback日志框架中的继承机制详解

devtools/2025/1/1 1:42:55/

在Logback框架中,logger的继承机制是基于层级结构(hierarchical context)工作的。每个logger都被分配一个名称,这个名称可以看作是一个路径或目录结构,从而形成了一个逻辑上的树状结构。这种结构使得日志记录具有很强的灵活性和可控性。

Logger 层级结构

  1. 根Logger (root logger)

    • 根logger是所有logger的祖先,它没有名称,通常通过<root>标签来配置。
    • 每个应用程序至少有一个root logger,并且它是唯一不需要显式命名的logger。
    • 如果某个logger没有定义特定的日志级别,它会继承root logger的日志级别。
  2. 命名Logger

    • 除了root logger之外的所有logger都是命名logger,它们的名字通常是类、包或者自定义的字符串。
    • 命名logger按照点号(.)分隔成多个部分,例如com.example.service,其中com是顶级节点,examplecom的子节点,serviceexample的子节点。

继承规则

  • 日志级别继承

    • 如果一个logger没有显式设置自己的日志级别,那么它将继承其最近的父级logger的日志级别。最终,如果追溯到root logger,而root logger也没有设置日志级别,则默认使用DEBUG级别(具体取决于框架版本和配置)。
  • Appender继承

    • 默认情况下(即additivity=true),一个logger的日志事件不仅会被自己配置的appender处理,还会被传递给它的所有祖先logger,直到root logger,由这些祖先logger配置的appender再次处理。
    • 如果一个logger设置了additivity=false,那么它的日志事件只会被自己配置的appender处理,不会传递给任何祖先logger。

示例

假设你有如下的logback配置:

<configuration><appender name="FILE" class="ch.qos.logback.core.FileAppender"><!-- appender configuration --></appender><root level="INFO"><appender-ref ref="FILE"/></root><logger name="com.example" level="DEBUG"/><logger name="com.example.service" level="TRACE" additivity="false"><appender-ref ref="FILE"/></logger>
</configuration>

在这个例子中:

  • root logger的日志级别为INFO,并且有一个FILE类型的appender。
  • com.example logger的日志级别为DEBUG,但是它没有自己的appender,所以它会继承root logger的appender。
  • com.example.service logger的日志级别为TRACE,并且它有自己的appender,同时它的additivity属性被设置为false,这意味着它的日志信息不会被传递给com.example或root logger,只会在它自己的appender中处理。

通过这样的层级结构和继承规则,Logback允许开发者精细地控制不同包、类或组件的日志输出行为,确保应用的日志系统既灵活又高效。


http://www.ppmy.cn/devtools/146515.html

相关文章

Windows安装使用 Git Bash教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载链接二、安装步骤二、扩展 前言 在Windows环境进行某些项目开发时&#xff0c;有时会需要使用Bash。Git Bash 可让您在 Windows 计算机上使用 Bash 命…

01.04、回文排序

01.04、[简单] 回文排序 1、题目描述 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。 2、解题思路 回文串的特点&#xff1a; 一个回文串在…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令&#xff0c;它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip &#xff08;Python 的包管理工具&#xf…

Flink Data Source详解

注意在高版本中SourceFunction以及其子类RichSourceFunction、ParallelSourceFunction等已经被标记为废弃,所以我们要看数据源的实现只需要关注Source接口(org.apache.flink.api.connector.source.Source)。了解Source背后的架构和运行原理有助于我们更好的使用Source,或者…

Mysql第三章 - Mysql使用

连接数据库 MySQL与所有客户机—服务器DBMS一样&#xff0c;要求在能执行命令之前登录到DBMS&#xff0c;MySQL在内部保存自己的用户列表&#xff0c;并且把每个用户与各种权限关联起来 连接Mysql信息 主机名&#xff08;计算机名&#xff09;&#xff1a; 本地Mysql为 localho…

PDF书籍《手写调用链监控APM系统-Java版》第10章 插件与链路的结合:SpringBoot环境插件获取应用名

本人阅读了 Skywalking 的大部分核心代码&#xff0c;也了解了相关的文献&#xff0c;对此深有感悟&#xff0c;特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式&#xff0c;看本书时一定要跟着敲代码。 作者…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

OpenCV-Python实战(6)——图相运算

一、加法运算 1.1 cv2.add() res cv2.add(img1,img2,dstNone,maskNone,dtypeNone) img1、img2&#xff1a;要 add 的图像对象。&#xff08;shape必须相同&#xff09; mask&#xff1a;图像掩膜。灰度图&#xff08;维度为2&#xff09;。 dtype&#xff1a;图像数据类型…