文章目录
一、logback 简介
官方文档:https://logback.qos.ch/manual/
logback 是 继log4j(日志管理框架)推出后的升级版,由 log4j 的创始人 Ceki Gülcü 先生设计。
log back 相比于 log4j (官方文档指的是log4j 1.x 版本)的优势有(部分):【具体请参考官方说明:https://logback.qos.ch/reasonsToSwitch.html】
- 运行速度更快,内存占用更小
- logback-classic 组件实现了 SLF4J 原生的 API,所以 logback 可以用来替换使用 SLF4J 的项目
- 若更新了配置文件,logback-classic 可以自动快速地重新加载配置文件, 可动态扩展到每秒百万次的调用,分布在数百个线程上,不涉及创建单独的扫描线程
- 提供 I / O 故障恢复机制,若文件服务器出现故障,则无需重启应用程序来恢复记录,当文件服务器恢复正常时,相关的 logback appender 会快速地从之前的故障状态中恢复(由LogbackFileAppender及其所有子类,包括RollingFileAppender实现)
- 自动删除旧的日志记录,可控制日志记录文件的最大数量以及最长保存时间,通过设置TimeBasedRollingPolicy 或SizeAndTimeBasedFNATP的maxHistory属性,默认时间单位是月
官方版本说明: https://logback.qos.ch/news.html
- Logback 官方于2021-08-10 发布 1.3.0-alpha7 版本 ,支持 Java8,Jetty 9.4.9 和 Tomcat 9.0.50
- 截止 2022 / 07/ 21,最新的稳定 logback 版本是 1.2.11,支持 Java 8
- 官方 Maven 的仓库 groupId 为 ch.qos.logback
logback 支持的日志级别与说明
级别 | 描述 |
---|---|
TRACE | 在线调试,默认情况下,该级别日志既不打印到终端,也不输出到文件 |
DEBUG | 终端查看,调试,默认情况下输出到终端,但不会归档到日志文件 |
INFO | 记录程序进度和状态信息 |
WARN | 警告信息 |
ERROR | 状态错误,该错误发生后,程序仍可以运行 |
日志级别:ERROR > WARN> INFO > DEBUG > TRACE
二、logback 架构
参考资料:https://logback.qos.ch/manual/architecture.html
主要模块:logback主要分成三大模块,分别是:
- logback-core,框架的核心,其他两个模块依赖此模块
- logback-classic,log4j优化版本,原生实现了 slf4j
- logback-access,可集成到现有的 Servlet 容器,如 Tomcat 和 Jetty
注:我们可以基于 logback-core 自定义模块
2.1 logback 中主要的三个接口
logback主要支持三个接口:Logger、Appender 和 Layout,这三种类型的组件协同工作,使开发人员能根据消息类型和级别记录消息,并在运行时控制这些消息的格式和报告位置
接口 Logger 是 logback-classic
中的一部分,而 Appender 和 Layout 这两个接口是 logback-core
的一部分,作为通用模块,logback-core里没有 Logger
2.2 Logger Context
任何一个日志 API 都比原始的控制台打印 System.out.println
更有优势,因为能禁用指定的日志语句,同时也允许其他日志语句不受影响地打印到控制台或文件,即支持多线程操作。
在 logback-classic
模块中,这种分类是 loggers里的一部分,
LoggerContext 支持生成多个 logger,并存储到内部的一种树形结构中,每个独立的 logger 都需连接到 LoggerContext。
不同的 logger 具有不同的名称,而且是区分大小写的,通过符号点来区分父级和子级,比如
名为 com.uni
是 com.uni.Logger
的父级。
LoggerContext 中存在一个 root logger
,其特点是位于 logger 树形层次结构的顶部,其他的logger都是 root logger的子节点,我们可通过 getLogger 方法获取
// final static String ROOT_LOGGER_NAME = "ROOT";
Logger rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
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);
}
2.3 Logback中的日志级别
官方文档:https://logback.qos.ch/manual/architecture.html
logback中的日志级别又称级别继承(Level Inheritance)
之前提到的日志级别均在 logback的 logback-classic模块中的 ch.qos.logback.classic.Level 内定义
package ch.qos.logback.classic;
import java.io.Serializable;
public final class Level implements Serializable {
public static final Level OFF = new Level(2147483647, "OFF");
public static final Level ERROR = new Level(40000, "ERROR");
public static final Level WARN = new Level(30000, "WARN");
public static final Level INFO = new Level(20000, "INFO");
public static final Level DEBUG = new Level(10000, "DEBUG");
public static final Level TRACE = new Level(5000, "TR