一、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>

  filterappender 的子标签,使用方法如下:

 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
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!