您的位置:首页 > 编程语言 > Java开发

设置spring-boot的logging

2017-04-21 00:00 357 查看
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-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进行讨论和学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息