SpringBoot日志配置
在前一个项目simple-boot-demo项目中配置日志相关。
SpringBoot日志依赖为:spring-boot-starter-logging
,不过对于web项目,已经引入了spring-boot-starter-web
,默认已经自带了日志的spring-boot-starter-logging
,已经默认引入了logback
实现,只需要配置application.yml即可。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
Spring内部使用Commons Logging,SpringBoot项目日志实现可以用log4j2,logback,JDK (Java Util Logging)等。
参考文档:
https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/howto.html#howto-logging
使用默认logback
配置日志级别
level是个map,配置不同的日志名称的级别,一般情况下都是配置些包名称就可以了,因为一般都是用类名作为日志名称,常见写法如下:
private static final Logger logger = LoggerFactory.getLogger(SomeClass.class);
logging:
level: # level是个map,配置不同的日志名称的级别
root: error
org.springframework: debug
配置文件日志
默认配置下只会在控制台输出日志,没有文件日志,可以配置文件名来控制文件输出。
日志文件配置:
logging.file.name |
logging.file.path |
示例 | 描述 |
---|---|---|---|
(none) | (none) | 只有控制台日志 | |
指定文件名 | (none) | my.log |
指定文件名,相对路径的话在当前目录,也可以是绝对路径 |
(none) | 指定文件目录 | /var/log |
指定相对或绝对目录,默认文件名为:spring.log |
日志配置示例:
logging:
file:
name: C:/simple-logs/simple-boot-demo.log
文件日志详情
另外一些文件日志配置如下,主要配置文件大小分隔、历史记录、输出格式等,这些配置在IDE中都有提示输入:
logging:
file:
name: C:/simple-logs/simple-boot-demo.log
max-size: 10MB # 单个文件大小
max-history: 7 # 最大历史天数7天
total-size-cap: 0B # 总文件大小限制0MB,无限制
patten:
file: %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
level: # level是个map,配置不同的日志名称的级别
root: error
org.springframework: debug
注意:这些配置在使用自定义的配置文件logging.config=classpath:logback-spring.xml
时,如果include引入sping-boot项目中的logback配置xml片段,这些application.yml中的配置也是有效的,而且level配置还是优先于配置文件
日志分组配置
日志可以分组配置,针对部分日志名称定义一个分组,可以统一配置此分组的级别:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
logging.level.tomcat=DEBUG
SpringBoot内置的日志分组:
Name | Loggers |
---|---|
web | org.springframework.core.codec , org.springframework.http , org.springframework.web , org.springframework.boot.actuate.endpoint.web , org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql | org.springframework.jdbc.core , org.hibernate.SQL , org.jooq.tools.LoggerListener |
使用自定义logback
SpringBoot如果要使用自定义的logback作为日志实现,需要编写logback.xml,但是引入logback之后,logback会自动查找logback.xml,因此不能把名字定义为logback.xml,否则可能早于SpringBoot初始化,造成一些配置无效问题。
自定义配置文件
使用logback-spring.xml
或者使用loging.config
来指定配置文件(默认名字为logback-spring.xml
的文件springboot会自动获取到,自定义名字需要手动配置):
logging:
config: classpath:demo-logback.xml
logback配置文件
在spring-boot项目的jar包中,spring为了简化配置,已经在项目中内置了一些logback的配置片段,方便使用include方式引入,打开可以看到内容是用<included></include>
包裹,因此自定义配置文件logback.xml
的时候直接include即可。
配置片段路径:org/springframework/boot/logging/logback/
文件名 | 说明 |
---|---|
defaults.xml | 默认的一些日志配置 |
console-appender.xml | 控制台输出appender等 |
file-appender.xml | 文件输出appender等 |
base.xml | 基础配置,包含上面的三个配置文件,兼容老版本springboot的配置 |
典型logback.xml
配置文件如下,其中引用了spring-boot提供的xml片段:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="debug">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<logger name="org.springframework.web" level="ERROR"/>
</configuration>
上面的配置是文件取名为demo-logback.xml
,方便引入。
配置application.yml:
logging:
file:
name: C:/simple-logs/simple-boot-demo.log
max-size: 100KB # 可以改大小测试生成多个带时间信息的文件
max-history: 7
total-size-cap: 0MB
config: classpath:demo-logback.xml
总结
- SpringBoot项目在通常情况下不需要用自定义的
logback.xml
配置,除非还需要为日志做一些定制(如需要append到logstash等),否则直接使用application.yml
配置就足够了。 - 自定义
logback.xml
,最好自定义一个名称或者使用logback-spring.xml
- 使用include方式引入spring-boot.jar中的xml的时候,application.yml中很多配置也是有效的。