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

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

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