logback日志配置

一、简介

logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。其也是SpringBoot内部集成的默认框架。logback主要分为三个模块

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

二、logback配置介绍

  • 日志的级别

    从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。

  • 自定义日志配置

    SpringBoot默认集成了logback日志框架我们需要通过外部配置文件的方式去配置日志服务就可以轻松使用,在resources根目录下创建 logback-spring.xml或者logback.xml配置文件。 Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置,如果想使用别的名字需要在application.yaml文件中指定

    logging:
      config: xxx.xml
    

    一篇logback-spring.xml的模板配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    根节点<configuration>包含三个属性:
        scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
        scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,
        此属性生效。默认的时间间隔为1分钟。
        debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
        这里配置的10秒钟检测一次配置文件
    -->
    <configuration  scan="true" scanPeriod="10 seconds">
    
        <!--
        子节点<contextName>:用来设置上下文名称:每个logger都关联到logger上下文,默认上下文名称为“default”。
        但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称
        -->
        <contextName>logback</contextName>
    
        <!--
        子节点<property>设置变量,类似于maven的property。用来定义变量值的标签,有两个属性,name和value;其中name的值是变量的名称,
        value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
        -->
        <property name="log.path" value="F:/log" />
    
        <!--控制台日志格式:彩色日志 %颜色()-->
        <!-- magenta:洋红 -->
        <!-- boldMagenta:粗红-->
        <!-- cyan:青色 -->
        <!-- white:白色 -->
        <!-- magenta:洋红 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%magenta(%M)|%cyan(%msg%n)"/>
    
        <!--文件日志格式-->
        <property name="FILE_LOG_PATTERN"
                  value="%date{yyyy-MM-dd HH:mm:ss} |%-5level |%thread |%file:%line |%logger | %M |%msg%n" />
        <!--
               日志输出格式:
                   %-5level 日志级别
                   %d{yyyy-MM-dd HH:mm:ss} 日期
                   %c 或者%logger类的完整名称
                   %M method方法名
                   %L 行号
                   %thread 线程名
                   %m或者%msg 日志信息
                   %n 换行
    
    
               -->
        <!--编码-->
        <property name="ENCODING"
                  value="UTF-8" />
    
    
        <!--
        子节点<appender>:appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,
        常用就是控制台输出策略和文件输出策略。
        -->
        <!--输出到控制台-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <!--日志级别-->
                <level>INFO</level>
            </filter>
            <encoder>
                <!--日志格式-->
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <!--日志字符集-->
                <charset>${ENCODING}</charset>
            </encoder>
        </appender>
    
        <!--输出到文件-->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--日志过滤器:此日志文件最低只记录INFO级别的-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <!--是INFO日志就接受-->
                <onMatch>ACCEPT</onMatch>
                <!--不是INFO日志就拒绝-->
                <onMismatch>DENY</onMismatch>
            </filter>
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_info.log</file>
            <encoder>
                <!--日志打印的格式-->
                <pattern>${FILE_LOG_PATTERN}</pattern>
                <!--编码格式-->
                <charset>${ENCODING}</charset>
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录红会自动对日志进行拆分 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 每天日志归档路径以及格式 -->
                <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!--超过100MB就查分日志-->
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
        </appender>
    
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 日志过滤器:此日志文件只记录WARN级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_warn.log</file>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
        </appender>
    
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 日志过滤器:此日志文件只记录ERROR级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <!-- 正在记录的日志文件的路径及文件名 -->
            <file>${log.path}/log_error.log</file>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
                <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
            </encoder>
            <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <!--日志文件保留天数-->
                <maxHistory>15</maxHistory>
            </rollingPolicy>
        </appender>
    
        <!--开发环境-->
        <springProfile name="dev">
            <!--可以灵活设置此处,从而控制日志的输出-->
            <!--这里的级别只能比过滤器设置的打印级别相等或者更高,如果这里的级别比filter设置的级别低则以filter的设置为准-->
            <root level="DEBUG">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="INFO_FILE" />
                <appender-ref ref="WARN_FILE" />
                <appender-ref ref="ERROR_FILE" />
            </root>
        </springProfile>
    
        <!--生产环境-->
        <springProfile name="pro">
            <!--这里的级别只能比过滤器设置的打印级别相等或者更高,如果这里的级别比filter设置的级别低则以filter的设置为准-->
            <root level="ERROR">
                <appender-ref ref="ERROR_FILE" />
            </root>
            <!--   <logger></logger>-->
        </springProfile>
    
    </configuration>
    
    
    <!--
    <property>:定义变量
    <appender>:定义日志记录器
    <filter>:定义日志过滤器
    <rollingPolicy>:定义滚动策略
    <springProfile>:定义日志适配的环境
    <root>:根日志记录器
    -->
    
  1. 根节点包含三个属性

    • scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

    • scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

    • debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

  2. 子节点:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。可以通过%contextName来打印日志上下文名称

  • 子节点 :用来定义变量值,它有两个属性name和value,通过定义的值会被插入到logger上下文中,可以使“${}”来使用变量。

    • name:彬良的名称
    • value:变量的值
  • 子节点:获取时间戳字符串,他有两个属性key和datePattern

  • key: 标识此 的名字;

  • datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。

    例如:

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> 
      <contextName>${bySecond}</contextName> 
      <!-- 其他配置省略--> 
    </configuration>
    
  • 子节点:appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

    • ch.qos.logback.core.ConsoleAppender:控制台Appender
      • 子标签filter:过滤器可以通过LevelFilter过滤器设置日志最低的打印级别
      • 子标签encoder:可用通过Pattern标签设置日志格式,通过charset设置日志的字符集
    • ch.qos.logback.core.rolling.RollingFileAppender:滚动文件Appender
      • 子标签filter:同上
      • 子标签encoder:同上
      • 子标签file:日志文件保存的路径
      • 子标签<rollingPolicy>:设置滚动策略
  • 子节点:定义日志适配的环境是开发环境还是生产环境

  • 子节点:用来设置某一个包或具体的某一个类的日志打印级别、以及指定

    • 仅有一个name属性,一个可选的level和一个可选的additivity属性(选择是否继承root)。
    • 可以包含零个或多个元素,标识这个appender将会添加到这个logger
    • 属性name: 用来指定受此logger约束的某一个包或者具体的某一个类。
    • 属性level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。
    • 属性additivity: 是否向上级logger传递打印信息。默认是true。
  • 子节点:root节点是必选节点是根日志记录器,它也是元素,但是它是根logger,是所有的上级,属性 level: 用来设置打印级别,大小写无关。

参考链接:https://www.cnblogs.com/warking/p/5710303.html

参考链接:https://www.cnblogs.com/dw3306/p/12372871.html

logback中文文档:http://www.logback.cn/

原文地址:https://www.cnblogs.com/myblogstart/p/14054230.html