描述 spring boot 日志配置的使用及其实现
切换日志组件
spring boot 支持 logback 和 log4j2, 默认情况下使用 logback 作为日志组件,可以切换到 log4j2,方法如下
1 | <dependency> |
说明:spring-boot-starter-logging 引入 logback 而 spring-boot-starter-log4j2 引入 log4j2。 spring 根据 classpath 里有什么日志组件的类就使用对应的日志组件。
配置列表
在 spring-boot.jar!org.springframework.boot.logging 里有与默认配置等价的配置文件,不同的日志组件在对应的子目录下
配置列表
- logging.config 指定配置文件,之后日志系统都使得用配置文件的设定。示例 logging.config: classpath:logback.xml
- logging.exception-conversion-word 打印异常的代码,默认值 %wEx
- logging.file 日志文件名
- logging.file.max-size 文件最大的大小
- logging.file.max-history 文件最大保留天数
- logging.path 日志文件保存路径
- logging.group 可用来快速修改一组 logger。示例 logging.group.db=org.hibernate,org.springframework.jdbc
- logging.level 修改日志级别。示例 logging.level.org.springframework=DEBUG
- logging.pattern.console 输出到控制台的日志的 pattern
- logging.pattern.dateformat 日期的输出格式
- logging.pattern.file 输出到文件的日志的 pattern
- logging.pattern.level 指示如何在日志中输出日志级别,默认值 %5p
- logging.register-shutdown-hook 指定是否注册一个 shutdown hook
日志配置初始化过程
LoggingApplicationListener 负责加载和初始化日志。它是一个 ApplicationListener, 通过 spring 事件触发日志的初始化
LoggingApplicationListener 的成员 LoggingSystem loggingSystem 是日志系统的抽象在 ApplicationStartingEvent 事件处理中,通过 LoggingSystem.get 得到 LoggingSystem 实例。LoggingSystem.SYSTEMS 静态成员中保存了 LoggingSystem 会找的类,如果找到就会创建对应的 LoggingSystem 子类实例。对应关系如下:
logback: 找 ch.qos.logback.core.Appender 类, 找到就创建 LogbackLoggingSystem
log4j2:找 org.apache.logging.log4j.core.impl.Log4jContextFactory 类, 找到就创建 Log4J2LoggingSystem
如果都没有就创建 JavaLoggingSystem。 各个 LoggingSystem 的具体实现会用对应的方法设置各个日志配置。在 ApplicationEnvironmentPreparedEvent 事件处理中, 调用 LoggingApplicationListener.initialize 根据配置初始化 LoggingSystem
在 ApplicationPreparedEvent 事件处理中将 LoggingSystem 实例注册到 ApplicationContext, Bean 名是 springBootLoggingSystem。如果有 LogFile 实例,也会注册到 ApplicationContext, Bean 名是 springBootLogFile。
最后,处理 ContextClosedEvent 事件时调用 LoggingSystem.cleanUp 清理环境
日志配置代码实现
LoggingApplicationListener.initialize 方法对日志进行配置
1 |
|