spring-boot默認使用logback來記錄logger员舵,spring-boot的包里面org.springframework.boot.logging.logback
路徑下面有一些配置文件很澄,默認的情況下會使用base.xml
泡躯,它把日志輸出到控制臺和文件之中心包。它的內(nèi)容是:
<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目錄下面創(chuàng)建一個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-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'