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