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
裏面include
了org/springframework/boot/logging/logback/file-appender.xml
app
咱們來看看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進行討論和學習。