設置spring-boot的logging

 

spring-boot默認使用logback來記錄logger,spring-boot的包裏面org.springframework.boot.logging.logback路徑下面有一些配置文件,默認的狀況下會使用base.xml,它把日誌輸出到控制檯和文件之中。它的內容是:java

<included>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</included>

對於輸出到文件,若是設置了logging.file就使用該值做爲文件名稱,若是設置了logging.path就使用logging.path/spring.log做爲文件名稱,若是都沒有設置就放入臨時文件中。spring

那麼問題來了,若是要寫入文件的話,一個文件不會被寫得很大嗎?
這個時候就能夠看base.xml裏面includeorg/springframework/boot/logging/logback/file-appender.xmlapp

咱們來看看org/springframework/boot/logging/logback/file-appender.xml裏面是什麼東西spring-boot

<included>
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
</included>

是的,默認的配置裏面有個SizeBasedTriggeringPolicy來表示文件的大小,每一個文件到了10MB的時候就會從新開啓一個文件,而且把以前的名稱命名成${LOG_FILE}.%i,這樣就解決了日誌文件過大的問題。學習

有人可能想問,這些都是默認的配置,若是我不想使用默認的配置,我想按照天來切割日誌,應該如何設置呢?.net

能夠在resources目錄下面建立一個logback-spring.xml的文件,而且給出本身想要的配置,這裏給一個簡單的配置是的日誌文件能夠按天爲單位來切割日誌文件日誌

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
     <appender name="TIME_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxHistory>365</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
     </appender>
     <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="TIME_FILE" />
     </root>
</configuration>

上面%d{yyyy-MM-dd}表示命名的文件名字以原始的名字後面加上日期做爲後綴,<maxFileSize>100MB</maxFileSize>表示每一個文件大小爲100MB。這樣日誌文件就會以日期來進行切割而且進行保存了。code

因此說若是要自定義日誌的格式, 就能夠經過本身編寫logback-spring.xml這個文件來本身定義了。xml

最後在配置文件appication.yaml設置好文件名稱和日誌級別就能夠了ci

spring:  
  application:    
    name: spring-boot-logging

logging:  
  file: ./logs/spring-boot-logging.log  
  level:    
    com.dragon.study.spring.boot: DEBUG

若是須要在logback-spring.xml自定義一些配置文件,可使用

<springProperty scope="context" name="SYSLOG_HOST" source="logging.syslog.host" defaultValue="syslog.hostname" />
    <springProperty scope="context" name="SYSLOG_FACILITY" source="logging.syslog.facility" defaultValue="LOCAL7"/>

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>${SYSLOG_HOST}</syslogHost>
        <facility>${SYSLOG_FACILITY}</facility>
    </appender>

而後在appication.yaml的配置文件中加入

logging.syslog.facility: syslog.change.hostname
logging.syslog.facility: LOCAL1

配置進行替代默認值

PS: 遇到一個坑, 就是想關掉某個包下面的日誌,不能直接

logging:  
  level:    
    com.dragon.study.spring.boot: OFF

由於OFF是yaml的關鍵字,上面那麼寫沒有任何做用
因此若是想關掉某個包下面的日誌的正確方法是 OFF上面加上單引號

logging:  
  file: ./logs/spring-boot-logging.log  
  level:    
    com.dragon.study.spring.boot: 'OFF'

 

最後若是以爲所講的東西可以幫助到你,而且但願進行更詳細的深刻的學習,歡迎加羣632109190進行討論和學習。

相關文章
相關標籤/搜索