SpringBoot实战(04):整合Logback日志框架

SpringBoot整合Logback日志框架

  • 一、前言
  • 二、默认日志格式
  • 三、配置日志文件
    • 1.xml配置文件
    • 2.自定义日志格式
    • 3.日志的归档和清理
    • 4.logback-spring.xml文件
  • 四、相关链接

一、前言

日志是追溯系统使用记录、跟踪问题的的依据,是系统不可缺少的重要组成部分。在SpringBoot中,默认使用的是Logback日志。如果创建一个项目没有引用其他的日志框架的化。默认使用Logback打印日志,下面简单介绍一下我们如何使用Logback日志框架。

二、默认日志格式

创建一个新项目,直接运行SpringBoot项目后,在控制台中就会生成Logback默认的日志格式,下面简单介绍一下系统默认的打印格式。
SpringBoot实战(04):整合Logback日志框架_第1张图片

  1. 时间日期:日志打印时间,精确到毫秒。
  2. 日志级别:ERROR,WARN,INFO,DEBUG,TRACE。
  3. 进程ID:进程ID指的是当前应用对应的PID。
  4. 分隔符:–标识实际日志的开始。
  5. 线程名:方括号括起来(可能会阶段控制台输出)
  6. Logger名:通常使用源代码的类名
  7. 日志内容:日志正文

三、配置日志文件

虽然SpringBoot项目配置的默认格式信息非常详细,而且我们正式的项目设置的日志格式也差不太多,但是默认配置的日志信息,只会将日志默认输出到控制台,并不会将日志写入到日志文件中。实际的项目中,肯定是要通过日志文件来分析问题的。所以需要我们自定义日志配置。

1.xml配置文件

SpringBoot默认支持使用xml自定义日志格式,只需要在src/main/resources文件夹下定义一个logback-spring.xml
SpringBoot实战(04):整合Logback日志框架_第2张图片

SpringBoot官网推荐优先使用带有-spring的文件名作为你的日志配置,如果命名为logback-spring.xml,就可以在日志输出的时候引入一些SpringBoot特有的配置项。当然也可以支持自定义日志配置,在application.yml文件中配置logging.config=classpath:logback-config.xml,就会去读取src/main/resources文件夹下的logback-config.xml。

2.自定义日志格式


<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logbackcontextName>
    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
    
    <root level="error">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    root>
configuration>
  • configuration标签为根节点,包含下面三个属性:

    • scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    • scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    • debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
  • contextName标签用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用contextName设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。

  • appender:负责写日志的组件

    • class="ch.qos.logback.core.ConsoleAppender"表示设置控制台的
    • class="ch.qos.logback.core.rolling.RollingFileAppender"表示按天写入日志文件
  • pattern标签用于设置每行日志的格式,信息如下:

    • %d :输出日志时间,可以使用%d{HH:mm:ss}对日志进行格式化。
    • %thread:输出日志的进程名称。
    • %-5level:日志级别,并且使用5个字符靠左对齐,也可以使用%p输出日志级别。
    • %logger{36}:打印日志的输出者,一般打印那个类打印的日志。
    • %msg:日志信息
    • %n:换行
    • %c:用来在日志上输出类的全名。

3.日志的归档和清理

日志已经有了,但是随着时间推移, 所有的日志放在一个文件也不行,一般来说,生产日志需要按日期进行存档,且对于比较久的日志要进行迁移或者删除,避免出现磁盘占满影响系统正常运行。下面介绍一下,日志的归档和清理。

    
    <appender name="logFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>truePrudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <FileNamePattern>
                applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
            FileNamePattern>
            
            <maxHistroy>30maxHistroy>
            
            <maxFileSize>500MBmaxFileSize>
        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} -%msg%n
            Pattern>
        layout>
    appender>

标签说明:

  • FileNamePattern:日志文件位置。
  • maxHistroy:设置最大的日志保存时间,单位为天。
  • maxFileSize:设置最大的日志文件大小,如果超过就会生成新的文件。

4.logback-spring.xml文件

下面是我的项目中使用的一个日志配置文件,大家可以复制到项目中直接使用。


<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logbackcontextName>
    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
    appender>

    
    <appender name="logFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>truePrudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <FileNamePattern>
                applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log
            FileNamePattern>
            
            <maxHistory>10maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>

        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} -%msg%n
            Pattern>
        layout>
    appender>

    
    <logger name="com.ming" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    logger>

    
    <root level="error">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    root>

configuration>

四、相关链接

本人利用闲暇时间写写博客,并在github和gitee里面新建了一个项目,博客的内容是根据平时在写项目代码后的知识点总结。既是对自己的一个总结,也是给大家的一点小小分享,希望大家多多支持!如有问题希望大家多多指教。谢谢!

  • 项目链接:
    Github地址:https://github.com/jieming514/ming.git
    Gitee地址:https://gitee.com/jie_ming514/ming.git

  • 其他博客链接:
    SpringBoot实战(01):创建一个SpringBoot项目
    SpringBoot实战(02):整合jUnit测试框架
    SpringBoot实战(03):全局异常处理ErrorController

你可能感兴趣的:(SpringBoot)