LogBack简单配置及理解

701 阅读2分钟

快速理解logback的日志打印原理、及简单配置

LogbackDemo.class 测试类

package com.example.demolog;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackDemo {
    private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);
    private static Logger myLog = LoggerFactory.getLogger("myLog");

    public static void main(String[] args) {
        log.trace("======trace");
        log.debug("======debug");
        log.info("======info");
        log.warn("======warn");
        log.error("======error");

        myLog.trace("mylog---trace");
        myLog.debug("mylog---debug");
        myLog.info("mylog---info");
        myLog.warn("mylog---warn");
    }
}

logback.xml

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

<!--    <logger name="com.example" additivity="false">-->
<!--        <appender-ref ref="STDOUT" />-->
<!--    </logger>-->

<!--    &lt;!&ndash; logback为java中的包 &ndash;&gt;-->
<!--    <logger name="com.example.demolog" additivity="true">-->
<!--        <appender-ref ref="STDOUT" />-->
<!--    </logger>-->

    <!--logback.LogbackDemo:类的全路径 -->
    <logger name="com.example.demolog.LogbackDemo" additivity="false">
        <appender-ref ref="STDOUT"/>
    </logger>

    <logger name="myLog" additivity="false" level="debug">
        <appender-ref ref="STDOUT" />
        <level value="trace" />
    </logger>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

<root> 根logger,是其他logger的顶级。root就类似一个目录的根目录,所有的logger都会一级一级的往上面传递,前提是additivity属性为true(默认即为true)。如果additivity = fasle则当前logger不会继续传递日志信息到它的上一级。 name="com.example.demolog"的loggger就是name="com.example.demolog.LogbackDemo"的上级,而name="com.example.demolog"的上级就是root

appender是用来处理日志信息的,将日志输出到不同的地方。譬如控制台、文件,这些是由对应的appender类来处理,ConsoleAppenderRollingFileAppender

<logger name="myLog" additivity="false" level="debug">为自定义名称的logger,可以通过LoggerFactory.getLogger("myLog")来获取,这么来看的话是不是就可以自定义一些与框架里面相同的log名称来覆盖一些日志级别等配置。比如rocketMq、ShardingSphere等

    public static Logger getLogger(String name) {
        ILoggerFactory iLoggerFactory = getILoggerFactory();
        return iLoggerFactory.getLogger(name);
    }

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo-log</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-log</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

    </dependencies>

    <build>
    </build>

</project>