26.5. 自定义日志配置

通过将相应的库添加到classpath可以激活各种日志系统,然后在classpath根目录下提供合适的配置文件可以进一步定制日志系统,配置文件也可以通过Spring Environmentlogging.config属性指定。

使用org.springframework.boot.logging.LoggingSystem系统属性可以强制Spring Boot使用指定的日志系统,该属性值需要是LoggingSystem实现类的全限定名,如果值为none,则彻底禁用Spring Boot的日志配置。

由于日志初始化早于ApplicationContext的创建,所以不可能通过@PropertySources指定的Spring @Configuration文件控制日志,系统属性和Spring Boot外部化配置可以正常工作。

以下文件会根据你选择的日志系统进行加载:

日志系统

定制配置

Logback

logback-spring.xml,logback-spring.groovy,logback.xmllogback.groovy

Log4j

log4j.propertieslog4j.xml

Log4j2

log4j2-spring.xmllog4j2.xml

JDK (Java Util Logging)

logging.properties

如果可能的话,建议你使用-spring变种形式定义日志配置(例如,使用logback-spring.xml而不是logback.xml)。如果你使用标准的配置路径,Spring可能不能够完全控制日志初始化。

Java Util Logging从可执行jar运行时会导致一些已知的类加载问题,我们建议尽可能不使用它。

以下是从Spring Envrionment转换为System properties的一些有助于定制的配置属性:

Spring Environment

System Property

Comments

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

记录异常使用的关键字

logging.file

LOG_FILE

如果指定就会在默认的日志配置中使用

logging.file.max-size

LOG_FILE_MAX_SIZE

最大日志文件大小(如果LOG_FILE启用)。(只支持默认的Logback设置)

logging.file.max-history

LOG_FILE_MAX_HISTORY

保留的归档文件的最大数量(如果LOG_FILE启用)。(只支持默认的Logback设置)

logging.path

LOG_PATH

如果指定就会在默认的日志配置中使用

logging.pattern.console

CONSOLE_LOG_PATTERN

日志输出到控制台(stdout)时使用的模式(只支持默认的logback设置)

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

日志日期格式的输出格式(只支持默认的logback设置)

logging.pattern.file

FILE_LOG_PATTERN

日志输出到文件时使用的模式(如果LOG_FILE启用,只支持默认的logback设置)

logging.pattern.level

LOG_LEVEL_PATTERN

用来渲染日志级别的格式(默认%5p,只支持默认的logback设置)

PID

PID

当前的处理进程(process)ID(能够找到,且还没有用作OS环境变量)

所有支持的日志系统在解析配置文件时都能获取系统属性的值,具体可以参考spring-boot.jar中的默认配置。

如果想在日志属性中使用占位符,你需要使用Spring Boot的语法,而不是底层框架的语法。尤其是使用Logback时,你需要使用:作为属性名和默认值的分隔符,而不是:-

通过覆盖LOG_LEVEL_PATTERN(Logback对应logging.pattern.level),你可以向日志中添加MDC和其他ad-hoc的内容。例如,将该值设置为logging.pattern.level=user:%X{user} %5p,则默认日志格式将包含一个"user"的MDC实体,如果存在的话,比如:

2015-09-30 12:30:04.031 user:juergen INFO 22174 --- [ nio-8080-exec-0] demo.Controller
Handling authenticated request