設定spring-boot的logging,spring-bootlogging
spring-boot預設使用logback來記錄logger,spring-boot的包裡面org.springframework.boot.logging.logback路徑下面有一些設定檔,預設的情況下會使用base.xml,它把日誌輸出到控制台和檔案之中。它的內容是:
<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作為檔案名稱,如果都沒有設定就放入臨時檔案中。
那麼問題來了,如果要寫入檔案的話,一個檔案不會被寫得很大嗎?
這個時候就可以看base.xml裡面include了org/springframework/boot/logging/logback/file-appender.xml
我們來看看org/springframework/boot/logging/logback/file-appender.xml裡面是什麼東西
<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,這樣就解決了記錄檔過大的問題。
有人可能想問,這些都是預設的配置,如果我不想使用預設的配置,我想按照天來切割日誌,應該如何設定呢?
可以在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。這樣記錄檔就會以日期來進行切割並且進行儲存了。
所以說如果要自訂日誌的格式, 就可以通過自己編寫logback-spring.xml這個檔案來自己定義了。
最後在設定檔appication.yaml設定好檔案名稱和記錄層級就可以了
spring: application: name: spring-boot-logginglogging: 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.hostnamelogging.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進行討論和學習。