Spring Boot 内部采用的是 Commons Logging 进行日志记录,但在底层为 Java Util Logging
、Log4J2
、Logback
等日志框架提供了默认配置 。
Logback 是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
日志格式
SpringBoot 的默认输出的日志格式如下:
从上图可以看到,日志输出内容元素具体如下:
- 时间日期:精确到毫秒
- 日志级别:ERROR, WARN, INFO, DEBUG, TRACE
- 进程ID
- 分隔符:
---
标识实际日志的开始 - 线程名:方括号括起来(可能会截断控制台输出)
- Logger名:通常使用源代码的类名
- 日志内容
控制台输出
日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于 WARN 的信息都不会输出。
SpringBoot 默认为我们输出的日志级别为 INFO
、WARN
、ERROR
,如需要输出更多日志的时候,可以通过以下方式开启
- 命令模式配置:
java -jar app.jar --debug=true
, 这种命令会被 SpringBoot 解析,且优先级最高 - 资源文件配置:
application.properties
配置debug=true
即可。该配置只对 嵌入式容器、Spring、Hibernate生效,我们自己的项目想要输出 DEBUG 需要额外配置。
文件输出
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。
- logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:
logging.file=my.log
- logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:
logging.path=/var/log
如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。
如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log
注:二者不能同时使用,如若同时使用,则只有logging.file生效
日志文件在达到 10MB 时进行切割,产生一个新的日志文件(如:spring.1.log、spring.2.log),新的日志依旧输出到 spring.log 中去,默认情况下会记录 ERROR、WARN、INFO 级别消息。
- logging.file.max-size: 限制日志文件大小
- logging.file.max-history: 限制日志保留天数
级别控制
所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中)
格式为:logging.level.* = LEVEL
logging.level
:日志级别控制前缀,*
为包名或 Logger 名LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:
logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR
#比如 mybatis sql日志
logging.level.org.mybatis = INFO
logging.level.mapper所在的包 = DEBUG
自定义日志配置
由于日志服务一般都在 ApplicationContext 创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的 Spring Boot 外部配置文件依然可以很好的支持日志控制和管理。
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
- Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2:log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring
的文件名作为你的日志配置(如使用logback-spring.xml
,而不是logback.xml
),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。
上面是默认的命名规则,并且放在src/main/resources
下面即可。
如果你即想完全掌控日志配置,但又不想用 logback.xml 作为 Logback 配置的名字,可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日
志配置,这个功能会很有用。