本文翻译自:Logback Architecture
Logback的基本架构足够通用,以适用于不同的环境。目前,Logback分为三个模块,logback-core、logback-classic和logback-access。
core模块为其他两个模块奠定了基础。classic模块扩展了core模块,相当于log4j的一个显著改进版本。logback-classic原生实现了SLF4J API,可以和其他日志系统随意地来回切换,诸如log4j、JUL等。access模块与Servlet容器集成以提供HTTP访问日志的功能。
记录器、附着器、布局
Logback建立在三个主要类的基础上:Logger、Appender、Layout。三种类型的组件协同工作,使开发人员能够根据消息类型和级别记录消息,并在运行时控制这些消息的格式和报告位置。
Logger类是classic模块的一部分,Appender和Layout接口是core模块的一部分,core作为一个通用模块,没有记录器的概念。
Logger上下文
任何日志API优于普通System.out.println的优势在于它能够禁用某些日志语句,与此同时让其他的语句不受影响地打印。该功能假设日志空间(即所有可能的日志记录语句的空间)根据某些开发人员选择的标准进行分类。在classic模块中,分类是记录器的固有部分。每一个记录器都附加到一个LoggerContext上,该LoggerContext负责生成记录器并将它们安排在层次结构树中。
记录器是命名的实体,名字大小写敏感并且遵循层次命名规则:
Named Hierarchy
A logger is said to be an ancestor of another logger if its name followed by a dot is a prefix of the descendant logger name. A logger is said to be a parent of a child logger if there are no ancestors between itself and the descendant logger.
例如:名为com.foo的记录器是名为com.foo.bar记录器的父记录器。
根记录器在记录器层次结构的顶端,它是每个层级的一部分。可以通过名字来检索记录器,如下:
Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
所有的记录器都可以通过org.slf4j.LoggerFactory
类的静态方法getLogger
来检索,方法以期望的记录器名字作为参数。Logger
接口的部分基础方法如下:
package org.slf4j;
public interface Logger {
// Printing methods
public void trace(String message);
public void debug(String message);
public void info(String message);
public void warn(String message);
public void error(String message);
}
<