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进行讨论和学习。