SpringBoot自定义日志配置(生产环境-详解):

SpringBoot项目创建后,便可以直接使用日志。默认打印在控制台。但有时我们需要自定义日志的级别,甚至希望不同包输出不同的日志级别。或者希望将日志信息保存到文件中,方便存档 。【见上一篇SpringBoot中日志的简单使用。】

​ 在生产环境中,我们经常需要根据日期自动生成日志,并做备份,这就需要用logback-spring.xml文件做详细的配置。需要创建logback-spring.xml并放置到resource目录下。

自定义logback日志配置文件:

  • 日志配置模板一:简单配置(复制修改日志文件存储路径即可测试)

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    
    
    <property name="LOG_PATH" value="G:/iotLog2"/>
    <property name="PATTERN" value=""/>
    
    <contextName>logbackcontextName>

    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>infolevel>
        filter>
        
        <encoder>
            <pattern>
             %d{yyyy-MM-dd} = [%thread] = %-5level = %logger{50} = %msg%n
            pattern>
            <charset>UTF-8charset>
        encoder>
    appender>


    
 	<appender name="logInfoFile"
           class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>infolevel>
            
            <onMatch>ACCEPTonMatch>
            
            <onMismatch>DENYonMismatch>
        filter>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>
                ${LOG_PATH}/info/iot-info-%d{yyyy-MM-dd}.log
            fileNamePattern>
            
            <maxHistory>90maxHistory>
            
            
        rollingPolicy>

        <append>trueappend>

        
        <encoder>
            <charset>GBKcharset>
            <pattern>${PATTERN}pattern>
        encoder>
    appender>

    
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="logInfoFile"/>
    root>

    
    
    <logger name="com.iot.mqtt.controller" level="INFO" additivity="false">
    	<appender-ref ref="console"/>
    logger>

configuration>

控制台打印效果:

SpringBoot自定义日志配置(生产环境-详解):_第1张图片

文件中打印效果:会生成一个info文件夹,日志文件名称根据日期生成。

SpringBoot自定义日志配置(生产环境-详解):_第2张图片

配置文件logback-spring.xml节点详细介绍:

  • configuration:跟节点有以下属性

    • scan: 此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
    • scanPeriod: 设置监测配置文件是否有修改的时间间隔,当scan为true时生效
    • debug: 当此属性设置为true时,将打印出logback内部日志信息.默认false
  • contextName: 设置日志上下文名称,可以通过%contextName来打印日志上下文名称

  • property: 可以用来定义变量,可以通过${name}来访问,有以下三个属性

    • name:名称
    • value:值
    • file: 用于指定配置文件的路径,如果你有多个配置信息,可以写在配置文件中,然后通过file引入

​ 例如:

<property file="G:/variables.properties" />

​ variables.properties如下:

LOG_PATH=G:/iotLog
PATTERN=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
  • appender: 格式化日志输出节点,可以配置多个。有两个属性name和class.
    name可以自定义,class指定输出策略,一般就是控制台和文件输出。apeender有以下子节点.

  • filter: 日志输出拦截器,一般使用系统提供的即可,祥见配置。

  • encoder: 和pattern节点组合用于具体输出的日志格式和编码方式。

  • file: 节点用来指明日志文件的输出位置,可以是绝对路径也可以是相对路径

  • rollingPolicy: 日志回滚策略,在这里我们用了TimeBasedRollingPolicy,基于时间的回滚策略,有以下子节点fileNamePattern,必要节点,可以用来设置指定时间的日志归档,例如我们上面的例子是每天将日志归档成一个zip包

  • maxHistory : 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,,例如设置为30的话,则30天之后,旧的日志就会被删除

  • totalSizeCap: 可选节点,用来指定日志文件的上限大小,例如设置为3GB的话,那么到了这个值,就会删除旧的日志

  • root节点: 必选节点,用来指定最基础的日志输出级别,必须将定义的appender添加到该节点。

    <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="logInfoFile"/>
    root>
    
  • logger节点:可选节点,用来具体指明包的日志输出级别,它将会覆盖root的输出级别

生产配置模板:(可以作为模板直接使用)

使用该配置会生成两个文件夹 info和error,分别存放info和error级别的日志文件,具体见配置文件。


<configuration scan="true" scanPeriod="60 seconds" debug="false">

    
    
    <property name="LOG_PATH" value="G:/iotLog"/>
    <property name="PATTERN"
              value="%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n"/>
    <property name="CONSOLE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%5p) | %green(%thread) | %boldMagenta(%logger) | %cyan(%msg%n)"/>

    <contextName>logbackcontextName>

    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>infolevel>
        filter>
        
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}pattern>
            <charset>UTF-8charset>
        encoder>
    appender>


    
    <appender name="logInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>infolevel>
            
            <onMatch>ACCEPTonMatch>
            
            <onMismatch>DENYonMismatch>
        filter>
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_PATH}/info/iot-info-%d{yyyy-MM-dd}.logfileNamePattern>
            
            <maxHistory>90maxHistory>
            
            
        rollingPolicy>

        <append>trueappend>

        
        
            
        
        
        <encoder>
            <charset>GBKcharset>
            <pattern>${PATTERN}pattern>
        encoder>
    appender>


    
    <appender name="logErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>errorlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_PATH}/error/iot-error-%d{yyyy-MM-dd}.logFileNamePattern>
            <maxHistory>90maxHistory>
        rollingPolicy>

        
        <append>trueappend>

        <encoder>
            <charset>GBKcharset>
            <pattern>${PATTERN}pattern>
        encoder>
    appender>


    
        
        
    

    
    <logger name="com.iot.mqtt.controller" level="INFO" additivity="false"/>


    
    <springProfile name="dev">
        
        <root level="DEBUG">

            <appender-ref ref="logInfoFile"/>

            <appender-ref ref="logErrorFile"/>

            <appender-ref ref="console"/>

            

        root>

    springProfile>

    
    <springProfile name="pro">
        
        <root level="INFO">
            <appender-ref ref="logInfoFile"/>

            <appender-ref ref="logErrorFile"/>

            <appender-ref ref="console"/>

            
        root>

    springProfile>








    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    



configuration>

总结:

要想配置出自己想要的日志格式和不同的输出策略,最重要的是要清楚配置文件各个节点的作用。更为详细的配置和节点功能,可以访问SpringBoot官网的日志配置和logback的相关配置 码字不易,路过的点个赞呗。

你可能感兴趣的:(springboot)