Spring Boot 自定义日志详解
本节内容基于 spring boot 2.0.
你所需具备的基础
- 什么是 spring boot?
- spring boot 核心配置文件详解
- spring boot 开启的 2 种方式
- spring boot 自动配置原理、实战
- spring boot 2.x 启动全过程源码分析
更多请在java技术栈微信公众号后台回复关键字:boot。
spring boot 日志综合介绍
spring boot 内部代码使用的是 commons-logging
来记录日志的,但是底层日志实现框架是可以随意替换的。spring boot为 java util logging
, log4j2
, 和 logback
日志框架提供了默认配置。
spring boot支持的日志框架默认配置如下。
# logging logging.config= # location of the logging configuration file. for instance, `classpath:logback.xml` for logback. logging.exception-conversion-word=%wex # conversion word used when logging exceptions. logging.file= # log file name (for instance, `myapp.log`). names can be an exact location or relative to the current directory. logging.file.max-history=0 # maximum of archive log files to keep. only supported with the default logback setup. logging.file.max-size=10mb # maximum log file size. only supported with the default logback setup. logging.level.*= # log levels severity mapping. for instance, `logging.level.org.springframework=debug`. logging.path= # location of the log file. for instance, `/var/log`. logging.pattern.console= # appender pattern for output to the console. supported only with the default logback setup. logging.pattern.dateformat=yyyy-mm-dd hh:mm:ss.sss # appender pattern for log date format. supported only with the default logback setup. logging.pattern.file= # appender pattern for output to a file. supported only with the default logback setup. logging.pattern.level=%5p # appender pattern for log level. supported only with the default logback setup. logging.register-shutdown-hook=false # register a shutdown hook for the logging system when it is initialized.
如果不配置以上任何参数,日志默认只会以 info
以上的级别打印在控制台,不会记录在日志文件中。
如果使用了任何 starters
,那 spring boot 默认会使用 logback
日志框架记录日志,并为 logback
提供了支持java util logging
, commons logging
, log4j
, slf4j
适合的桥接器以便能从这些日志门面中*切换。即项目中不管使用哪个日志门面,logback都能正常工作。
如下图,从 spring-boot-starter-web
依赖树中看出包含了默认日志框架 logback
及其他的桥接器。
spring boot 日志实战
在配置文件 application.properties
添加以下配置。
# 日志级别 logging.level.root=debug # 输出到日志文件 logging.file=d:/logs/javastack.log # 控制框架中的日志级别 logging.level.org.springframework=info logging.level.sun=warn
在 application
启动类中添加以下测试代码。
private static final org.apache.commons.logging.log logger1 = org.apache.commons.logging .logfactory .getlog(springbootbestpracticeapplication.class); private static final org.slf4j.logger logger2 = org.slf4j.loggerfactory .getlogger(springbootbestpracticeapplication.class); private static final java.util.logging.logger logger3 = java.util.logging.logger .getlogger("springbootbestpracticeapplication"); @bean public commandlinerunner loggerlinerunner() { return (args) -> { logger1.error("commons logging error..."); logger1.info("commons logging info..."); logger2.info("slf4j info..."); logger2.info("java util logging info..."); logger1.debug("commons logging debug..."); }; }
日志输出如下。
2018-05-24 17:16:21.645 error 3132 --- [ main] c.j.s.springbootbestpracticeapplication : commons logging error... 2018-05-24 17:16:21.645 info 3132 --- [ main] c.j.s.springbootbestpracticeapplication : commons logging info... 2018-05-24 17:16:21.645 info 3132 --- [ main] c.j.s.springbootbestpracticeapplication : slf4j info... 2018-05-24 17:16:21.645 info 3132 --- [ main] c.j.s.springbootbestpracticeapplication : java util logging info... 2018-05-24 17:16:21.645 debug 3132 --- [ main] c.j.s.springbootbestpracticeapplication : commons logging debug...
程序中使用了三种不同的日志门面测试,和默认的 logback
框架工作都十分正常,日志也正常输出到指定文件中了。
spring boot 默认提供配置的形式非常简单,只适合简单的日志应用,虽然说日志输出格式可以自定义,但日志文件如何按天滚动等其他更复杂的策略却不能配置,只能通过自定义引用日志文件的形式。
spring boot 定制日志文件
简单的日志配置不能满足实际项目需求,那可以通过引用定制日志文件的形式达到目的。spring boot能根据类路径下的类库和配置文件自动配置对应的日志框架。
日志框架 | 配置文件 |
---|---|
logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
log4j2 | log4j2-spring.xml or log4j2.xml |
jdk (java util logging) | logging.properties |
按对应类库在 classpath 下创建对应支持的日志配置文件就行,或者通过配置 logging.config
指定。
既然默认是支持 logback
的,那现在只要在资源根目录下创建一个 logback-spring.xml
文件即可。xx-spring
这是 spring boot 推荐的命名方式,否则 spring boot 不能完全控制日志初始化,因为默认命名配置文件 logback.xml
加载较早不能获取到 application.properties
中的配置信息。
看到这里,相信你对 spring boot 的日志应该有了一个全面的了解。如何使用配置文件打印日志和传统项目一样,这里就不啰嗦了。
所有 spring boot 文章示例代码都在 github 上面,大家可以 star 关注一下。
https://github.com/javastacks/spring-boot-best-practice
关注java技术栈,获取更多干货推送!
本文原创首发于微信公众号:java技术栈(id:javastack),关注公众号在后台回复 "boot" 可获取更多,转载请原样保留本信息。