跳至主要內容

Logback 架构

Jin大约 4 分钟

Logback 架构

1、Logback 的架构

Logback 的基本架构足够通用,可以适用于不同情况。目前,logback 分为三个模块

  1. logback-core
  2. logback-classic
  3. logback-access
  • core模块为其他两个模块奠定了基础。
  • classic模块扩展了core。classic 模块对应于显著改进的 log4j 版本。Logback-classic 原生实现了SLF4J API open in new window*,*因此您可以轻松地在 logback 和其他日志系统(如 JDK 1.4 中引入的 log4j 或 java.util.logging (JUL))之间来回切换。
  • 第三个模块access与 Servlet 容器集成以提供 HTTP 访问日志功能。单独的文档介绍了access 模块文档open in new window

2、记录器、附加器和布局

Logback 建立在三个主要类之上:

  1. Logger
  2. Appender
  3. Layout

这三种类型的组件协同工作,使开发人员能够根据消息类型和级别记录消息,并在运行时控制这些消息的格式和报告位置。

Logger是 logback-classic 模块的一部分。另一方面,AppenderLayout接口是 logback-core 的一部分。作为通用模块,logback-core 没有 logger 的概念。

2.1、记录器上下文

任何日志 API 相对于普通 API 的首要优势 System.out.println 在于它能够禁用某些日志语句,同时允许其他日志语句不受阻碍地打印。此功能假设日志空间(即所有可能的日志语句的空间)根据开发人员选择的一些标准进行分类。在 logback-classic 中,这种分类是记录器固有的一部分。每个单独的记录器都附加到一个LoggerContext负责制造记录器并将其排列成树状层次结构的组件。

2.2、有效级别又称级别继承

可以为记录器分配级别。可能的级别集(TRACE、DEBUG、INFO、WARN 和 ERROR)在类中定义 ch.qos.logback.classic.Level。请注意,在 logback 中,Level类是最终的,不能被子类化,因为对象形式存在更灵活的方法Marker

给定记录器L的有效级别等于其层次结构中的第一个非空级别,从 L本身开始并沿层次结构向上朝向根记录器进行。

为了确保所有记录器最终都能继承一个级别,根记录器始终具有指定级别。默认情况下,此级别为 DEBUG。

下面是四个具有不同分配级别值的示例,以及根据级别继承规则产生的有效(继承)级别。

示例 1

如果包路径 root(如:com.jin ) 指定级别 为 debug ,如果子包 (如:com.jin.entity、com.jin.service.impl) 未指定级别,默认继承 为debug

如下所示:只有根记录器被分配了级别。此级别值DEBUG会被其他记录器继承 如:XX.Y并且X.Y.Z

记录器名称指定级别有效水平
rootDEBUGDEBUG
XnoneDEBUG
X.YnoneDEBUG
X.Y.ZnoneDEBUG

示例二

所有记录器都分配有级别值。级别继承不起作用。

记录器名称指定级别有效水平
rootERRORERROR
XINFOINFO
X.YDEBUGDEBUG
X.Y.ZWARNWARN

示例三

最近原则

记录器rootX和分别X.Y.Z被分配了级别 DEBUGINFOERROR 。记录器X.Y从其父级 继承其级别值X

记录器名称指定级别有效水平
rootDEBUGDEBUG
XINFOINFO
X.YnoneINFO
X.Y.ZERRORERROR

示例 4

记录器rootX和分别被分配了级别DEBUGINFO。记录器X.YX.Y.Z从其最近的父级X(已分配级别)继承其级别值。

记录器名称指定级别有效水平
rootDEBUGDEBUG
XINFOINFO
X.YnoneINFO
X.Y.ZnoneINFO

2.3、日志级别

根据定义,打印方法决定了日志请求的级别。例如,如果L是日志记录器实例,则该语句L.info("..")是 INFO 级别的日志记录语句。

如果日志记录请求的级别高于或等于其记录器的有效级别,则称其为已启用。否则,该请求被称为已**禁用。如前所述,未指定级别的记录器将从其最近的祖先那里继承一个级别。此规则总结如下。

基本选择规则

如果p >= q ,则启用 向具有有效级别q的记录器发出的级别p的日志请求。

TRACE < DEBUG < INFO < WARN < ERROR

用更直观的方式说明选择规则的工作方式。在下表中,垂直标题显示日志请求的级别,用p指定,而水平标题显示记录器的有效级别,用q指定。行(级别请求)和列(有效级别)的交集是基本选择规则产生的布尔值。

请求级别effective level q
pDEBUGINFOWARNERROROFF
TRACEYESNONONONONO
DEBUGYESYESNONONONO
INFOYESYESYESNONONO
WARNYESYESYESYESNONO
ERRORYESYESYESYESYESNO
贡献者: Jin