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 排版

  • 相关阅读:
    好玩的SQL
    Oracle常用函数
    树控件DeleteAllItems之前先SelectItem(NULL)
    MFC控件位置调整
    C++中一个0xC0000005访问冲突问题
    为MFC按钮添加各种图片
    LVN_ITEMCHANGED(OnItemchanged)通知响应多次的问题
    android 里边的mk文件的解析
    定义属于自己的标题栏
    block 影响代码执行由上往下执行顺序 从而影响功能的解决
  • 原文地址:https://www.cnblogs.com/A-yes/p/13292791.html
Copyright © 2011-2022 走看看