zoukankan      html  css  js  c++  java
  • logback配置说明

     

     

    logback配置详解

    官方文档 http://logback.qos.ch/manual/

    1. 根节点 - configuration

    一共有三个属性

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

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

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

    1.1 configuration - appender

    指定日志输出格式,输出位置,相当于一个出口

    2个主要属性

    • name name指定appender名称

    • class class指定appender的全限定名

    1.1.1 configuration - appender - encoder

    encoder负责将事件转换为字节数组,并将该字节数组写入OutputStream。可以设置日志输出格式。

        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
            <encoder>
                <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder> 
        </appender>
    
    1.1.2 configuration - appender - filter

    对日志进行过滤,常用的2中

    • ch.qos.logback.classic.filter.ThresholdFilter 指定最低日志级别,高于等于设定级别的日志都会被输出
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
            <!-- 高于debug的日志都会被输出 -->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
    
    • ch.qos.logback.classic.filter.LevelFilter LevelFilter基于精确的级别匹配过滤事件。如果事件的级别等于配置的级别,则筛选器接受或拒绝该事件,这取决于onMatch和onMisMatch属性的配置。
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 只输出INFO级别日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
          <level>INFO</level>
          <onMatch>ACCEPT</onMatch>
          <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    1.1.3 configuration - appender - append

    追加日志还是覆盖日志

        <appender name="file" class="ch.qos.logback.core.FileAppender">
            <file>${basePath}self.log</file>
            <!-- 默认append=true,即可追加而非覆盖 -->
            <append>true</append>
            <encoder> 
                <pattern>${pattern}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <!-- prudent=true表示日志写入线程安全,会降低效率,默认为false -->
            <prudent>false</prudent>
        </appender>
    
    1.1.4 configuration - appender - prudent

    prudent=true表示日志写入线程安全,会降低效率,默认为false

    配置如上

    1.1.5 configuration - appender 输出到Console
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
            <encoder>
                <pattern>${pattern}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
    
    1.1.6 configuration - appender 输出到文件
        <appender name="file" class="ch.qos.logback.core.FileAppender">
            <file>${basePath}self.log</file>
            <!-- 默认append=true,即可追加而非覆盖 -->
            <append>true</append>
            <encoder> 
                <pattern>${pattern}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <!-- prudent=true表示日志写入线程安全,会降低效率,默认为false -->
            <prudent>false</prudent>
        </appender>
    
    1.1.7 configuration - appender 输出到滚动文件
    滚动策略。具体策略由class指定。
    

    TimeBasedRollingPolicy是最常用的滚动策略,根据时间滚动,当达到一定时间时,自动重新开辟一个日志文件

    FixedWindowRollingPolicy根据固定窗口算法重命名文件的滚动策略

    triggeringPolicy根据当前活动文件大小来决定是否滚动的策略

    SizeAndTimeBasedRollingPolicy同时根据日期和文件大小的滚动测策略

    <appender name="timeFile"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
       
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 由于表达式中最小单位为天,所以每天生成一个日志文件,且以此命名 -->
                <fileNamePattern>${basePath}RollingFile%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 保留归档文件的最大数量。 -->
                <!-- 本例中由于使用了时间作为滚动策略,且fileNamePattern中最小单位为天,所以归档文件保存30天,超过30天将被删除 -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
    
            <!-- 根据固定窗口模式生成日志文件,结合triggeringPolicy(当日志文件达到5MB时触发滚动,生成新的日志文件) -->
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <!-- 日志文件命名,%i代表从minIndex到maxIndex,即 fixedFile1.log.zip fixedFile2.log.zip
                fixedFile3.log.zip -->
                <!-- 当生成了3个归档文件后,若继续生成,将覆盖最早的日志 -->
                <fileNamePattern>${basePath}fixedFile%i.log.zip</fileNamePattern>
                <minIndex>1</minIndex>
                <!-- maxIndex若过大,会被设为12 -->
                <maxIndex>3</maxIndex>
            </rollingPolicy>
    
            <!-- 触发策略,达到一定条件时将通知appender,触发滚动 -->
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>5MB</maxFileSize>
            </triggeringPolicy>
    
            <!-- 同时根据时间和日期生成文件,单日文件大小超过指定会在生成一个文件 -->
             <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
    
            <encoder>
                <pattern>${pattern}</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
    1.2 configuration - logger

    logger是代码中获取用于输出的对象

    3个主要属性

    • name name属性可指定为包名或类名

    • level 声明输出级别

    • additivity 表示是否向父级logger传递打印消息,默认为true

    1.2.1 确定父子级别

    以name属性为判断标准,同java类的包关系。

    如下2个logger,第一个就是第二个的父级

    <logger name="a.b" level="debug">
    </logger>
    <logger name="a.b.c" level="debug">
    </logger>
    
    1.2.2 输出级别的判定

    若子logger没有指定level,则向父级找,以最近的一个父级的level为准,root节点是最高级,默认level是debug

    如下3个logger,第二个logger的level就是info

    <logger name="a" level="info">
    </logger>
    <logger name="a.b">
    </logger>
    <logger name="a.b.c" level="debug">
    </logger>
    
    1.2.3 是否向父级追加

    当 additivity = true 时,子logger输出一遍,父级还会输出一遍

    如下3个logger, 获取 logger = LoggerFactory.getLogger("a.b.c"),当用logger打印一个日志时,第三个会输出一次,第二个也会输出一次

    <logger name="a" level="info">
    </logger>
    <logger name="a.b" additivity="false">
    </logger>
    <logger name="a.b.c" level="debug">
    </logger>
    
    1.2.4 设置输出appender

    appender-ref指定输出位置,可以有0个或多个,0个就是没有输出位置,多个就是输出到多个位置

    <logger name="a" level="info">
        <appender-ref ref="stdout"/>
    </logger>
    <logger name="a.b" additivity="false">
    </logger> 
    
    1.3 configuration - root

    根logger,只需要指定一个 level

    1.4 在logback的配置文件里获取application.yml中的属性
    <springProperty name="basePath" source="log.path"/>
    

    要想用这个标签,配置文件名不能命名为 logback.xml 或 logback-test.xml,因为那样这个配置文件就会在spring加载前加载,就找不到 application.yml中的参数

    2 常用配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 默认为 <configuration scan="true" scanPeriod="60 seconds" debug="false"> -->
    <!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
    <!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟 -->
    <!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false -->
    <configuration>
        <contextName>myAppName</contextName>
        <springProperty name="basePath" source="log.path" defaultValue=""/>
    
        <!-- 彩色日志依赖的渲染类 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
        <conversionRule conversionWord="wex"
                        converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
        <conversionRule conversionWord="wEx"
                        converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    
        <property name="file_pattern"
                  value="%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n"/>
        <property name="console_pattern"
                  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
        <!-- appender是指输出的形式或位置,name和class是两个必备属性 -->
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!-- encoder负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。 -->
            <encoder>
                <pattern>${console_pattern}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
    
    
        <!-- Log file debug output -->
        <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${basePath}/debug.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${basePath}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>${file_pattern}</pattern>
            </encoder>
        </appender>
    
        <!-- Log file info output -->
        <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${basePath}/info.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${basePath}/%d{yyyy-MM, aux}/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>${file_pattern}</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
        </appender>
    
        <!-- Log file error output -->
        <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${basePath}/error.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${basePath}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>${file_pattern}</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
        </appender>
    
    
    
        <root level="debug">
            <appender-ref ref="stdout"/>
            <appender-ref ref="debug"/>
            <appender-ref ref="info"/>
            <appender-ref ref="error"/>
        </root>
    </configuration>
    
    

    本文使用 mdnice 排版

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/A-yes/p/13292791.html
Copyright © 2011-2022 走看看