springboot-logback日志框架的使用

更多文章欢迎访问个人博客 www.herobin.top

一 日志的简单介绍(可直接看第二部分)

  • 什么是日志框架
  • 日志框架的选择
  • Logback的使用和配置

什么是日志框架

是一套能实现日志输出的工具包

能够描述系统运行状态的所有时间都可以算作日志(用户下线,接口超时,数据库崩溃等等)

日志框架的能力

  • 定制输出目标
  • 定制输出格式
  • 携带上下文信息
  • 运行时选择性输出
  • 灵活的配置
  • 优异的性能

常见的日志框架

JUL JCL Log4j Log4j2 Logback SLF4j jboss-logging

  • 日志门面:JCL SLF4j jboss-logging
  • 日志实现:Log4j Log4j2 JUL

SLF4j Log4j Logback为同一个作者,实际上,logback是Log4j 2.0 Log4j2和Log4j并没有直接联系

在springboot中我们选用的是SLF4j+Logback

新建一个简单的测试类:

/**
 * Created by binzhang on 19/1/21.
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {

    private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

    @Test
    public void test1(){
        logger.debug("debug...");
        logger.info("info...");
        logger.error("error...");
    }

}

运行结果:

在这里插入图片描述

为什么只输出了info和error呢?

因为我们控制台打印的日志的级别默认是info,debug级别小于info故没有输出。

可以去Level类中查看级别(ctrl+o查找类,slf4j下的)源码:

Level.java

/**
 * 
 * @author ceki
 * @since 1.7.15
 */
public enum Level {

    ERROR(ERROR_INT, "ERROR"), WARN(WARN_INT, "WARN"), INFO(INFO_INT, "INFO"), DEBUG(DEBUG_INT, "DEBUG"), TRACE(TRACE_INT, "TRACE");

    private int levelInt;
    private String levelStr;

    Level(int i, String s) {
        levelInt = i;
        levelStr = s;
    }

    public int toInt() {
        return levelInt;
    }

    /**
     * Returns the string representation of this Level.
     */
    public String toString() {
        return levelStr;
    }
}

逐层向下可看到级别定义所在类LocationAwareLogger.java:

public interface LocationAwareLogger extends Logger {

    // these constants should be in EventContants. However, in order to preserve binary backward compatibility
    // we keep these constants here
    final public int TRACE_INT = 00;
    final public int DEBUG_INT = 10;
    final public int INFO_INT = 20;
    final public int WARN_INT = 30;
    final public int ERROR_INT = 40;

    public void log(Marker marker, String fqcn, int level, String message, Object[] argArray, Throwable t);

}

可以知道级别从小到大依次为:

  • TRACE 0
  • DEBUG 10
  • INFO 20
  • WARN 30
  • ERROR 40

二 logback的使用

两种配置方式

    1. application.yml(简便)
    1. logback-spring.xml(功能完善,推荐)

logback的功能需求

    1. 区分info和error日志
    1. 每天产生一个日志文件

当我们在yml中配置时:

在这里插入图片描述

可以看到输出明显和之前不一样了,说明可以在logging: pattern: console中配置文件的输出格式,这里只配置了时间 - 信息 换行符

还可以在这里配置其他的如日志生成目录,日志级别等。

但是在yml中功能会有很多制约,所以我们一般使用logback-spring.xml的方式。

resource下新建和application.yml同级的文件logback-spring.xml。

logback-spring.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!--日志格式的配置-->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d - %msg%n
            </pattern>
        </layout>
    </appender>

    <!--配置info级别的滚动的文件输出,每天生成一篇-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--设置过滤输出范围 注意 设置为INFO比INFO高的也会打印出来 所以使用后面那种方法-->
        <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
            <!--<level>INFO</level>-->
        <!--</filter>-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,按照时间来滚动,每天一个日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>/Users/binzhang/Documents/log/sell/info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <!--配置error级别的滚动的文件输出,每天生成一篇-->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--设置过滤输出范围-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略,按照时间来滚动,每天一个日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>/Users/binzhang/Documents/log/sell/error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="consoleLog" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
    </root>

</configuration>

配置好后再次执行LoggerTest测试类,发现两条需求均已满足,在目录下生成了对应的error和info日志文件,且里面内容对应正确。

至此,springboot与logback配置成功。

猜你喜欢

转载自blog.csdn.net/qq_24095055/article/details/86655605