SpringBoot 日志记录

简介

  1. Spring 使用commons-loggin作为内部日志,但底层日志实现是开放的,可对接其它日志框架。

  2. 支持jullog4j2logback等。SpringBoot 提供了默认的控制台输出配置,也可以配置日志输出为文件。

  3. SpringBoot 默认使用的是logback

日志配置

  1. 每个starrer场景,都会导入一个核心场景spring-boot-starter。

  2. 核心场景引入了日志的所有功能spring-boot-starter-logging。

  3. 默认使用logback+slf4j组合作为默认底层日志

  4. 日志是系统一启动就要用,xxxAutoConfiguration是系统启动好了以后放好的组件,后来用的。

  5. 日志是利用监听器机制配置好的,ApplicationListener。

  6. 日志所有的配置都可以通过修改配置文件实现。以loggin开始的所有配置。

日志格式

Drawing

注意:logback没有FATAL级别,对应的是ERROR

Drawing
自定义日志示例

我们会发现自定义的没颜色,SpringBoot的默认日志为我们设置了颜色等更多的配置。

我们也可以单独来设置日志的输出时间格式

Drawing
SpringBoot 日志示例

记录日志

Drawing
业务中记录日志的方式

日志级别

  • 由低到高:ALL < TRACE < DEBUG < INFO < WARN < EROR < FATAL < OFF

  • ALL:打印所有日志。

  • TRACE:追踪框架详细流程日志,一般不使用。

  • DEBUG:开发调试细节日志。

  • INFO:关键、感兴趣日志。

  • WARN:警告信息。

  • ERROR:业务错误日志,记录各种异常。

  • FATAL:致命错误,比如jvm系统奔溃。

  • OFF:关闭所有日志记录

不指定级别的所有类,都使用root指定的级别作为默认级别,SpringBoot日志的默认值级别是INFO。

application.properties中配置loggin.level.<logger-name>=<level>指定日志级别

日志分组

将相关的logger分组在一起,统一配置。例如:Tomcat相关日志统一设置

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

文件输出

SpringBoot默认只是把日志写在控制台,如果想要额外记录到文件,可以在application.properties添加logging.file.name或logging.file.path配置。

loggin.file.name
logging.file.path
示例
效果

未指定

未指定

仅控制台输出

指定

未指定

my.log

写入文件

未指定

指定

/var/log

写入指定目录,文件名为spring.log

指定

指定

以loggin.file.name为准

文档归档与滚动切割

  • 归档:每天的日志单独存到一个文档中。

  • 切割:每个文件10MB,超过大小切割成另外一个文件。

每天的日志应单独分割出来存档,如果使用logback,可以通过application.yaml文件指定规则。

如果是其它日志系统,需自行配置(添加log42.xml或log4j-spring.xml)

切换日志组合

log4j2支持yaml和json格式的配置文件

格式
依赖
文件名

YAML

com.fasterxml.jackson.core:jackson-databind + com.fasterxml.jackson.dataformat:jackson-dataformat-yaml

log4j2.yaml + log4j2.yml

JSON

com.fasterxml.jackson.core:jackson-databind

log4j2.json + log4j2.jsn

最佳实践

  1. 导入任何第三方框架之前,首先要排除它的日志包,因为SpringBoot底层控制好了日志。

  2. 修改application.properties配置文件,就可以调整日志的所有行为。甚至可以编写日志框架自己的配置文件放在类路径下就行,比如logback-spring.xmllog4j2-spring.xml

  3. 如需对接专业日志系统,只需要把logback记录的日志灌到kafka之类的中间接。

最后更新于