一、Logback 的简介
Logback 是由 log4j 创始人设计的另一个开源日志组件,性能比 log4j 要好。(官网)
Logback 主要分为三个模块:
- logback-core:其他两个模块的基础模块。
- logback-classic:它是 log4j 的一个改良版本,同时它完整实现了 slf4j-api。
- logback-access:访问模块于 Servlet 容器集成提供通过 Http 来访问日志的功能。
后续日志代码都是通过 slf4j 日志门面搭建日志系统,所以代码是没有区别的,主要是通过修改配置文件和 pom.xml 依赖。
二、Logback 入门
1、导入依赖
<!-- slf4j 日志门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
<!-- slf4j 的具体实现 logback-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha4</version>
<exclusions>
<!--用来排除传递性依赖。-->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--logback的基础模块-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
2、快速入门
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
public static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
// 日志输出
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
三、Logback 的配置
logback 会依次读取以下类型配置文件
- logback.groovy
- logback-test.xml
- logback.xml
1、logback 组件之间的关系
- Logger:日志的记录器,把它关联到应用的对应的 context 上后,主要用于存放日志对象,也可以定义日志类型、级别。
- Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
- Layout:负责把时事件转成字符串,格式化的日志信息,在 logback 中 Layout 对象被封装在 encoder 中。
2、简单配置信息
设置向控制台打印日志的级别和格式。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--
配置属性集中管理
我们通过格式 ${name} 来引用 value 的值
-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L %m%n"/>
<!--
日志输出格式:
%-5level 级别
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期
%c 类的完整名称
%M 为method
%L 为行号
%thread 线程名称
%m 或者 %msg 为信息
%n 为换行
-->
<!--
Appender:设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender 控制台
ch.qos.logback.core.FileAppender 文件中
ch.qos.logback.core.rolling.RollingFileAppender 根据文件大小输出到不同的文件中
-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制输出流对象 默认为 System.out-->
<target>System.err</target>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--
用来设置某一个包或者具体的某一个类的日志打印界别、以及指定<appender>
<logger>仅有一个 name 属性,一个可选的 level 和一个可选的 additivity 属性
name:
用来指定受此 logger 约束的某一个包或者具体的某一个类
level:
用来设置打印级别,如果未设置此属性,那么当前 logger 将会继承上级的级别
additivity:
是否向上级 logger 传递打印信息。默认是true
<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
-->
<!--
<root>也是<logger>元素,但它是根<logger>。默认为debug
level:用来设置打印级别
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
-->
<root level="ALL">
<appender-ref ref="console"/>
</root>
</configuration>
3、FileAppender 配置
将日志输出到指定目录中,记得要向 root 标签中添加指向。
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--日志文件报错路径-->
<file>E:\fileLogback.log</file>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
将日志以 HTML 的形式输出到指定目录中。
<appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
<!--日志文件报错路径-->
<file>E:\htmlFileLogback.html</file>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>${pattern}</pattern>
</layout>
</encoder>
</appender>
日志拆分和归档压缩
.%d{yyyy-MM-dd-HH-mm-ss}
表示按秒拆分,%i
表示按大小拆分的序号。
<!--日志拆分和归档压缩的 appender 对象-->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件报错路径-->
<file>E:\rollFileLogback.log</file>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!--指定拆分规则-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--按照时间和压缩格式声明拆分的文件名-->
<fileNamePattern>E:\rollFileLogback.%d{yyyy-MM-dd-HH-mm-ss}%i.log.gz</fileNamePattern>
<!--按照文件大小拆分-->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
4、过滤器
根据过滤器设置的属性值,来过滤掉不符合要求的日志级别。
<!--日志级别过滤器-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--日志过滤器-->
<!-- 设置日志级别 -->
<level>DEBUG</level>
<!-- 如果跟该日志水平相匹配,则放行 -->
<onMatch>ACCEPT</onMatch>
<!-- 如果跟该日志水平不匹配,则过滤掉 -->
<onMismatch>DENY</onMismatch>
</filter>
filter
是appender
的子标签,使用方法如下:
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制输出流对象 默认为 System.out-->
<target>System.err</target>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!--日志级别过滤器-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--日志过滤器-->
<!-- 设置日志级别 -->
<level>DEBUG</level>
<!-- 如果跟该日志水平相匹配,则放行 -->
<onMatch>ACCEPT</onMatch>
<!-- 如果跟该日志水平不匹配,则过滤掉 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
5、异步日志
为了提升日志的性能,可以使用异步日志。
<!--异步日志-->
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<!--指定某个具体的 appender-->
<appender-ref ref="file"/>
</appender>
6、自定义 Logger
通过自定义 Logger,设置指定包的日志级别。
<!-- 自定义 logger 对象-->
<logger name="top.zyxwmj.journal.demo" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
标题:日志框架——Logback
作者:Yi-Xing
地址:http://zyxwmj.top/articles/2020/03/23/1584955658144.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!