spring-boot默認(rèn)使用logback來記錄logger,spring-boot的包里面org.springframework.boot.logging.logback路徑下面有一些配置文件饺蚊,默認(rèn)的情況下會使用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>
對于輸出到文件颂龙,如果設(shè)置了logging.file就使用該值作為文件名稱葵第,如果設(shè)置了logging.path就使用logging.path/spring.log作為文件名稱税弃,如果都沒有設(shè)置就放入臨時文件中绅你。
那么問題來了伺帘,如果要寫入文件的話,一個文件不會被寫得很大嗎忌锯?
這個時候就可以看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>
是的伪嫁,默認(rèn)的配置里面有個SizeBasedTriggeringPolicy來表示文件的大小,每個文件到了10MB的時候就會重新開啟一個文件偶垮,并且把之前的名稱命名成${LOG_FILE}.%i张咳,這樣就解決了日志文件過大的問題帝洪。
有人可能想問,這些都是默認(rèn)的配置脚猾,如果我不想使用默認(rèn)的配置葱峡,我想按照天來切割日志,應(yīng)該如何設(shè)置呢婚陪?
可以在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。這樣日志文件就會以日期來進(jìn)行切割并且進(jìn)行保存了常空。
所以說如果要自定義日志的格式沽一, 就可以通過自己編寫logback-spring.xml這個文件來自己定義了。
最后在配置文件appication.yaml設(shè)置好文件名稱和日志級別就可以了
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
配置進(jìn)行替代默認(rèn)值
PS: 遇到一個坑铣缠, 就是想關(guān)掉某個包下面的日志,不能直接
logging:?
? level:? ?
? ? com.dragon.study.spring.boot: OFF
因?yàn)镺FF是yaml的關(guān)鍵字昆禽,上面那么寫沒有任何作用
所以如果想關(guān)掉某個包下面的日志的正確方法是 OFF上面加上單引號
logging:?
? file: ./logs/spring-boot-logging.log?
? level:? ?
? ? com.dragon.study.spring.boot: 'OFF'