Spring Boot日志记录
日志记录
Spring Boot 使用 Commons Logging 记录所有内部日志,但开放日志的底层实现。其为 Java Util Logging 、Log4J2 和 Logback 提供了默认配置。在每种情况下,日志记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。
默认情况下,如果您使用了 Starter,则使用 Logback 进行日志记录。还包括合适的 Logback 路由,以确保在使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。
1.1 日志格式
Spring Boot 默认日志输出类似于以下示例:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
输出以下项:
- 日期和时间:毫秒精度,易于排序。
- 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE。
- 进程 ID。
- 一个 --- 分隔符,用于区分实际日志内容的开始。
- 线程名称:在方括号中(可能会截断控制台输出)。
- 日志记录器名称:这通常是源类名称(通常为缩写)。
- 日志内容。
注意:
Logback 没有 FATAL 级别。该级别映射到 ERROR。
1.2 控制台输出
默认日志配置会在写入时将消息回显到控制台。默认情况下,会记录 ERROR、WARN 和 INFO 级别的日志。您还可以通过使用 --debug 标志启动应用程序来启用调试模式。
注意: 您还可以在 application.properties 中指定 debug=true。
启用调试模式后,核心日志记录器(内嵌容器、Hibernate 和 Spring Boot)将被配置为输出更多日志信息。启用调试模式不会将应用程序配置为使用 DEBUG 级别记录所有日志内容。
或者,您可以通过使用 --trace 标志(或在 application.properties 中的设置 trace=true)启动应用程序来启用跟踪模式。这样做可以为选择的核心日志记录器(内嵌容器、Hibernate 模式生成和整个 Spring 组合)启用日志追踪。
1.3 着色输出
如果您的终端支持 ANSI,则可以使用颜色输出来提高可读性。您可以将 spring.output.ansi.enabled 设置为受支持的值以覆盖自动检测。
可使用 %clr 转换字配置颜色编码。最简单形式是,转换器根据日志级别对输出进行着色,如下所示:
%clr(%5p)
下表描述日志级别与颜色的映射关系:
级别 | 颜色 |
---|---|
FATAL | 红(Red) |
ERROR | 红(Red) |
WARN | 黄(Yellow) |
INFO | 绿(Green) |
DEBUG | 绿(Green) |
TRACE | 绿(Green) |
1.4 文件输出
默认情况下,Spring Boot 仅记录到控制台,不会写入日志文件。想除了控制台输出之外还要写入日志文件,则需要设置 logging.file 或 logging.path 属性(例如,在 application.properties 中)。
下表展示了如何与 logging.* 属性一起使用:
logging.file | logging.path | 示例 | 描述 |
---|---|---|---|
(无) | (无) | 仅在控制台输出 | |
指定文件 | (无) | my.log | 写入指定的日志文件。名称可以是绝对位置或相对于当前目录 |
(无) | 指定目录 | /var/log | 将 spring.log 写入指定的目录。名称可以是绝对位置或相对于当前目录。 |
日志文件在达到 10MB 时会轮转,并且与控制台输出一样,默认情况下会记录 ERROR、WARN 和 INFO 级别的内容。可以使用 logging.file.max-size 属性更改大小限制。除非已设置 logging.file.max-history 属性,否则以前轮转的文件将无限期归档。
1.5 日志等级
所有受支持的日志记录系统都可以使用 logging.level.
以下示例展示了 application.properties 中默认的日志记录设置:
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1.6 日志组
将相关记录器组合在一起以便可以同时配置,这通常很有用。例如,您可以更改所有 Tomcat 相关记录器的日志记录级别,但您无法轻松记住顶层的包名。
为了解决这个问题,Spring Boot 允许您在 Spring Environment 中定义日志记录组。例如,以下通过将 tomcat 组添加到 application.properties 来定义 tomcat 组:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
定义后,您可以使用一行配置来更改组中所有记录器的级别:
logging.level.tomcat=TRACE
Spring Boot 包含以下预定义的日志记录组,可以直接使用:
名称 | 日志记录器 |
---|---|
web | org.springframework.core.codec、org.springframework.http、org.springframework.web |
sql | org.springframework.jdbc.core、org.hibernate.SQL |
1.7 自定义日志配置
可以通过在 classpath 中引入适合的库来激活各种日志记录系统,并且可以通过在 classpath 的根目录中或在以下 Spring Environment 属性指定的位置提供合适的配置文件来进一步自定义:logging.config。
您可以使用 org.springframework.boot.logging.LoggingSystem 系统属性强制 Spring Boot 使用特定的日志记录系统。该值应该是一个实现了 LoggingSystem 的类的完全限定类名。您还可以使用 none 值完全禁用 Spring Boot 的日志记录配置。
根据您的日志记录系统,将加载以下文件:
日志记录系统 | 文件 |
---|---|
Logback | logback-spring.xml、logback-spring.groovy、logback.xml 或者 logback.groovy |
Log4j2 | log4j2-spring.xml 或者 log4j2.xml |
DK(Java Util Logging) | logging.properties |
为了进行自定义,部分其他属性会从 Spring Environment 传输到 System 属性,如下表所述:
Spring Environment | 系统属性 | 说明 |
---|---|---|
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 | 日志日期格式的 Appender 模式。(仅支持默认的 Logback 设置。) |
logging.pattern.file | FILE_LOG_PATTERN | 要在文件中使用的日志模式(如果启用了 LOG_FILE)。(仅支持默认的 Logback 设置。) |
logging.pattern.level | LOG_LEVEL_PATTERN | 渲染日志级别时使用的格式(默认值为 %5p)。(仅支持默认的 Logback 设置。) |
PID | PID | 前进程 ID(如果可能,则在未定义为 OS 环境变量时发现) |