zoukankan      html  css  js  c++  java
  • springBoot 中 logback配置文件详解

    logback介绍和配置详解

    logback是Java的开源框架,性能比log4j要好。是springboot自带的日志框架。该框架主要有3个模块:

    logback-core:核心代码块(不介绍)

    log back-classic:实现了slf4j的api,加入该依赖可以实现log4j的api。

    log back-access:访问模块与servlet容器集成提供通过http来访问日志的功能(也就是说不需要访问服务器,直接在网页上就可以访问日志文件)。

    <!-- springboot 的springboot-core已经依赖了logback-core和logback-classic -->
    <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.25</version>
    </dependency>
    <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>1.7.25</version>
    </dependency>
    • 日志级别
      从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。

    • 自定义日志配置
      由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
      根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

    日志框架配置文件名
    Logback logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
    Log4j log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
    Log4j2 log4j2-spring.xml, log4j2.xml
    JDK (Java Util Logging) logging.properties
              Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。
    上面是默认的命名规则,并且放在src/main/resources下面即可。如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以在application.properties配置文件里面通过logging.config属性指定自定义的名字:logging.config=classpath:logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    
        <property name="LOG_FILE_NAME_PATTERN" value="logs/auth.%d{yyyy-MM-dd}.%i.log"/>
        <!-- 日志格式 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%c){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
        <property name="FILE_LOG_PATTERN"
                  value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %c : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <!--输出到文件-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE_NAME_PATTERN}</fileNamePattern>
                <!-- 日志保留天数 -->
                <maxHistory>366</maxHistory>
                <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
                <totalSizeCap>2GB</totalSizeCap>
    
                <!-- 每个日志文件的最大值 -->
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
    
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <!-- (多环境配置日志级别)根据不同的环境设置不同的日志输出级别 -->
        <springProfile name="default,local">
            <root level="info">
                <appender-ref ref="console"/>
            </root>
            <logger name="com.zhl" level="debug"/>
        </springProfile>
    
        <springProfile name="dev,test">
            <root level="info">
                <appender-ref ref="console"/>
                <appender-ref ref="file"/>
            </root>
            <logger name="com.zhl" level="debug"/>
        </springProfile>
    
        <springProfile name="product,pre">
            <root level="info">
                <appender-ref ref="console"/>
                <appender-ref ref="file"/>
            </root>
            <logger name="com.zhl" level="debug"/>
        </springProfile>
        
    </configuration>

    不同日志信息输出到不同文件: 

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <!-- 应用名称-->
        <property name="appName" value="zhlrm-ppt-service"/>
        <!-- 日志的存放目录-->
        <!-- debug-->
        <property name="DEBUG_LOG_FILE_NAME_PATTERN" value="logs/${appName}-debug.%d{yyyy-MM-dd}.%i.log"/>
        <property name="INFO_LOG_FILE_NAME_PATTERN" value="logs/${appName}-info.%d{yyyy-MM-dd}.%i.log"/>
        <property name="WARN_LOG_FILE_NAME_PATTERN" value="errlogs/${appName}-warn.%d{yyyy-MM-dd}.%i.log"/>
        <property name="ERROR_LOG_FILE_NAME_PATTERN" value="errlogs/${appName}-error.%d{yyyy-MM-dd}.%i.log"/>
        <!-- 日志格式 -->
        <property name="CONSOLE_LOG_PATTERN"
                  value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%c){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
        <property name="FILE_LOG_PATTERN"
                  value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %c : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <!--输出到DEBUG文件-->
        <appender name="debug_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${DEBUG_LOG_FILE_NAME_PATTERN}</fileNamePattern>
                <!-- 日志保留天数 -->
                <maxHistory>30</maxHistory>
                <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
                <totalSizeCap>2GB</totalSizeCap>
                <!-- 每个日志文件的最大值 -->
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <!-- 此日志文件只记录debug级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!--输出到INFO文件-->
        <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${INFO_LOG_FILE_NAME_PATTERN}</fileNamePattern>
                <!-- 日志保留天数 -->
                <maxHistory>7</maxHistory>
                <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
                <totalSizeCap>1GB</totalSizeCap>
                <!-- 每个日志文件的最大值 -->
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <!-- 此日志文件只记录info级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>info</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!--输出到WARN文件-->
        <appender name="warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${WARN_LOG_FILE_NAME_PATTERN}</fileNamePattern>
                <!-- 日志保留天数 -->
                <maxHistory>30</maxHistory>
                <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
                <totalSizeCap>1GB</totalSizeCap>
                <!-- 每个日志文件的最大值 -->
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <!-- 此日志文件只记录warn级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!--输出到ERROR文件-->
        <appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${ERROR_LOG_FILE_NAME_PATTERN}</fileNamePattern>
                <!-- 日志保留天数 -->
                <maxHistory>30</maxHistory>
                <!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
                <totalSizeCap>1GB</totalSizeCap>
                <!-- 每个日志文件的最大值 -->
                <timeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <!-- 此日志文件只记录error级别的 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>error</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!-- region 根据不同的环境设置不同的日志输出级别 -->
        <springProfile name="default,local,dev">
            <root level="info">
                <appender-ref ref="console"/>
            </root>
            <logger name="com.zhl.rm" level="debug"/>
        </springProfile>
    
        <springProfile name="prod,pre,test">
            <root level="info">
                <appender-ref ref="console"/>
                <appender-ref ref="debug_file"/>
                <appender-ref ref="info_file"/>
                <appender-ref ref="warn_file"/>
                <appender-ref ref="error_file"/>
            </root>
            <logger name="com.zhl.rm" level="debug"/>
        </springProfile>
        <!-- endregion -->
    
    </configuration>

    logback.xml格式详解

    • 根节点<configuration>包含的属性

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

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

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

    • 根节点<configuration>的子节点:<configuration>下面一共有2个属性,3个子节点,分别是:

      • 设置上下文名称<contextName>

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

      • 设置变量<property> 用来定义变量值的标签,有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。<property name="log.path" value="log" />

      • 子节点<appender>

        appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
        控制台输出ConsoleAppender:

               <encoder>:对日志进行格式化。

    FileAppender:把日志添加到文件,有以下子节点:

       <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

       <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

       <encoder>:对记录事件进行格式化。(具体参数稍后讲解 )

       <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

    RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:

    <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

    <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

    <rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类

    class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy,是最受欢迎的滚动政策,例如按天或按月。 TimeBasedRollingPolicy承担翻滚责任以及触发所述翻转的责任。TimeBasedRollingPolicy支持自动文件压缩。

     

    • 子节点<root>
      root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性,用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。可以包含零个或多个元素,标识这个appender将会添加到这个logger。

    <root level="debug">
       <appender-ref ref="console" />
       <appender-ref ref="file" />
    </root>
    
    • 子节点<logger>

      <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。

      • name:用来指定受此logger约束的某一个包或者具体的某一个类。

      • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。

      • addtivity:是否向上级logger传递打印信息。默认是true。




  • 相关阅读:
    php主要输出方式的区别
    文件操作
    会话
    Jquery常用函数及功能
    AJAX
    php 审核注册
    转载图片上传预览 代码
    php笔记-图片上传
    php 练习题-session与 cookie的 取值赋值
    php学习笔记-会话控制简单介绍session和cookie(一)
  • 原文地址:https://www.cnblogs.com/dw3306/p/12372871.html
Copyright © 2011-2022 走看看