愿君学长松,慎勿作桃李。这篇文章主要讲述日志技术专题「logback入门到精通」彻彻底底学会logback框架的使用和原理(入门介绍)相关的知识,希望能为你提供帮助。
技术介绍
什么是 logback?
- Logback为取代 log4j 而生。Logback 由 log4j 的创立者 Ceki Gülcü设计。以十多年设计工业级记录系统的经验为基础,所创建的logback 比现有任何记录系统(除了log4j2)更快、占用资源更少,有时差距非常大。
- Logback提供独特而实用的特性,比如,Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。
- 【日志技术专题「logback入门到精通」彻彻底底学会logback框架的使用和原理(入门介绍)】以上列出的仅仅是 logback 实用特性的一小部分,对于自身的错误报告,logback 依赖状态(Status)对象,状态对象极大地简化了故障查找。
- Logback-core 附带了 Joran,Joran 是个强大的、通用的配置系统,你可以在自己的项目
- 里使用 Joran 以获得巨大的作用。
- logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld1 {
public static void main(String[] args) {
Logger logger = LoggerFactory .getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world.");
}
}
- HelloWorld1 类导入了 SLF4J API 定义的 Logger 类和 LoggerFactory 类,更明确地说是定义在 org.slf4j 包里的两个类。
- main方法的第一行里,调用 LoggerFactory 类的静态方法 getLogger 取得一个 Logger 实例,将该实例赋值给变量 logger,logger 被命名为“chapters.introduction.HelloWorld1”。
- main方法继续调用这个 logger 的 debug 方法并传递参数“Hello world”。我们称之为 main 方法包含了一条消息是“Hello world”、级别是 DEBUG 的记录语句。
- main方法的第一行里,调用 LoggerFactory 类的静态方法 getLogger 取得一个 Logger 实例,将该实例赋值给变量 logger,logger 被命名为“chapters.introduction.HelloWorld1”。
实例:打印 Logger 状态
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}
日志输出
12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world. 12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49 :22,093 |-INFO in c h.qos.logbac k.c lassic .LoggerContext[default] - Setting up default
configuration.
- Logback说它没有找到配置文件 logback-test.xml 和 logback.xml,于是用默认策略进行配置,即用一个基本的ConsoleAppender。
- Appender 类可被视为输出目的地的。
- Appender 包含许多不同类型的目的地:
- 控制台
- 文件
- Syslog
- TCP 套接字
- JMS
- 其他
- 用户可以很容易地自定义 Appender。
- Appender 包含许多不同类型的目的地:
- 当发生错误时,logback 将自动在控制台上打印其内部状态。
- 记录系统的基本模式不会改变,可能改变的是配置过程。也许你想按照自己的需要来定制或配置logback,之后的章节会讨论配置 logback。
- 我们调用StatusPrinter.pring()方法来打印 logback 的内部状态。在诊断与logback相关的问题时,logback 的内部状态信息会非常有用。
- 配置 logback 环境。
- 在每个需要执行记录的类里,调用 org.slf4j.LoggerFactory 类的 getLogger()方法获 取一个 Logger 实例,以当前类名或类本身作为参数。
- 调用取得的 logger 实例的打印方法,即 debug()、info()、warn()和 error(),把记录输出到配置里的各 appender。
logback 的体系结构
- Core 模块是其他两个模块的基础。
- Classic 模块扩展了 core 模块,相当于 log4j 的显著改进版。
- Logback-classic 直接实现了 SLF4J API,因此你可以在 logback与其他记录系统如 log4j 和 java.util.logging (JUL)之间轻松互相切换。
- Access 模块与 Servlet 容器集成, 提供 HTTP 访问记录功能。
Logger、Appender 和 Layout
- Logback 建立于三个主要类之上:Logger、Appender 和 Layout。这三种组件协同工作, 使开发者可以按照消息类型和级别来记录消息,还可以在程序运行期内控制消息的输出格式 和输出目的地。
- Logger 类是 logback-classic 模块的一部分,而 Appender 和 Layout 接口来自 logback-core,作为一个多用途模块,logback-core 不包含任何 logger。
这种能力源自记录隔离(space)——即所有各种记录语句的隔离——是根据开发者选择的条件而进行分类的。
- 在 logback-classic里,这种分类是logger固有的。
- 各个logger都被关联到一个LoggerContext,LoggerContext 负责制造 logger,也负责以树结构排列各 logger。
次:
父子继承关系
- 如果 logger 的名称带上一个点号后是另外一个 logger 的名称的前缀,那么,前者就被称为后者的祖先。
- 如果 logger 与其后代 logger 之间没有其他祖先,那么,前者就被称为子 logger 之父。
Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。getLogger
方法以 logger 名称为参数。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);
}
有效级别(Level)即级别继承Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level 类。
如果 logger 没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。 更正式地说:
- logger L 的有效级别等于其层次等级里的第一个非 null 级别,顺序是从 L 开始,向上 直至根 logger。
- 为确保所有 logger 都能够最终继承一个级别,根 logger 总是有级别,默认情况下,这 个级别是 DEBUG。
推荐阅读
- SpringCloud升级之路2020.0.x版-27.OpenFeign的生命周期-创建代理
- Java多线程
- 坦克大战 (下)完结
- Spring功能介绍带你看看那些可能你还不知道的Spring技巧哦!
- 关于JVM调优,我理了一些工具和思路出来
- 手把手教你用 SQL 实现电商产品用户分析
- Tomcat调优——实战
- Redis调优——实战
- WordPress(活动主题未显示在”主题”文件夹中)