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.= 来设置 Spring Environment 中的记录器等级(例如,在 application.properties 中)。其中 level 是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 和 OFF 其中之一。可以使用 logging.level.root 配置 root 记录器。

以下示例展示了 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 环境变量时发现)
posted @ 2021-06-10 15:42  风飘落叶  阅读(758)  评论(0编辑  收藏  举报