springBoot深度解析-04springboot日志Logging

4. Logging

Spring Boot 将Commons Logging用于所有内部日志记录,但保持底层日志实现处于打开状态。为Java Util Logging、Log4J2和Logback提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,也可以使用可选的文件输出。

默认情况下,如果您使用“Starters”,则使用 Logback 进行日志记录。还包括适当的 Logback 路由,以确保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。

4.1. 日志格式

Spring Boot 的默认日志输出类似于以下示例:

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

输出以下内容:

  • 日期和时间:毫秒精度且易于排序。

  • 日志级别:ERRORWARNINFODEBUG,或TRACE

  • 进程标识。

  • 一个---分离器来区分实际日志消息的开始。

  • 线程名称:括在方括号中(可能会被截断以用于控制台输出)。

  • 记录器名称:这通常是源类名称(通常缩写)。

  • 日志消息

注:Logback没有FATAL级别的日志,它统一会被映射到error日志中 

4.2. 控制台输出

默认日志配置在写入消息时将消息回显到控制台。默认情况下,会记录ERROR-level、WARN-level 和INFO-level 消息。您还可以通过使用--debug标志启动应用程序来启用“调试”模式,(您也可以debug=true在您的application.properties)。

$ java -jar myapp.jar --debug

启用调试模式后,会配置一系列核心记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。启用调试模式并没有配置您的应用程序记录所有消息DEBUG的水平。

或者,您可以通过使用 --trace标志(或 trace=true在您的 application.properties)中启动应用程序来启用“跟踪”模式。这样做可以为选择的核心记录器(嵌入式容器、Hibernate 模式生成和整个 Spring 产品组合)启用跟踪日志记录。

4.2.1. 彩色日志输出

如果您的终端支持 ANSI,则使用颜色输出来提高可读性。您可以设置spring.output.ansi.enabled为支持的值以覆盖自动检测。

使用%clr转换字配置颜色编码。在最简单的形式中,转换器根据日志级别为输出着色,如以下示例所示:

%clr(%5p)

下表描述了日志级别到颜色的映射:

等级 颜色

FATAL

红色的

ERROR

红色的

WARN

黄色

INFO

绿

DEBUG

绿

TRACE

绿

或者,您可以通过将其作为转换选项提供来指定应使用的颜色或样式。例如,要使文本变黄,请使用以下设置:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

支持以下颜色和样式:

  • blue

  • cyan

  • faint

  • green

  • magenta

  • red

  • yellow

4.4. 文件轮换

如果您使用的是 Logback,则可以使用您的application.propertiesapplication.yaml文件微调日志轮换设置。对于所有其他日志系统,您需要自己直接配置轮换设置(例如,如果您使用 Log4J2,则可以添加一个log4j2.xmllog4j2-spring.xml文件)。

支持以下轮换策略属性

支持以下轮换策略属性:

姓名 描述

logging.logback.rollingpolicy.file-name-pattern

用于创建日志存档的文件名模式。

logging.logback.rollingpolicy.clean-history-on-start

应用程序启动时是否应进行日志存档清理。

logging.logback.rollingpolicy.max-file-size

归档前日志文件的最大大小。

logging.logback.rollingpolicy.total-size-cap

删除之前可以占用的最大大小日志存档量。

logging.logback.rollingpolicy.max-history

要保留的存档日志文件的最大数量(默认为 7)。

4.5. 日志级别

所有支持的日志系统都可以在 Spring 中设置日志级别Environment(例如, in application.properties),使用logging.level.=wherelevel是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一。该root记录器可以通过使用被配置logging.level.root

以下示例显示了 中的潜在日志记录设置application.properties

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

还可以使用环境变量设置日志记录级别。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG将设置org.springframework.webDEBUG

4.6. 日志组

能够将相关的记录器组合在一起以便可以同时配置它们通常很有用。例如,您通常可能会更改所有与 Tomcat 相关的记录器的日志记录级别,但您无法轻松记住顶级包。

为了解决这个问题,Spring Boot 允许您在 Spring 中定义日志记录组Environment。例如,这里是如何通过将“tomcat”组添加到您的 来定义“tomcat”组application.properties

logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

定义后,您可以使用一行更改组中所有记录器的级别:

logging.level.tomcat=trace

Spring Boot 包括以下可以开箱即用的预定义日志记录组:

姓名 记录器

网络

org.springframework.core.codecorg.springframework.httporg.springframework.weborg.springframework.boot.actuate.endpoint.web,org.springframework.boot.web.servlet.ServletContextInitializerBeans

sql

org.springframework.jdbc.coreorg.hibernate.SQL,org.jooq.tools.LoggerListener

4.7. 使用日志关闭钩子

为了在您的应用程序终止时释放日志资源,提供了一个关闭挂钩,当 JVM 退出时将触发日志系统清理。除非您的应用程序部署为 war 文件,否则此关闭挂钩会自动注册。如果您的应用程序具有复杂的上下文层次结构,则关闭挂钩可能无法满足您的需求。如果没有,请禁用关闭挂钩并调查底层日志系统直接提供的选项。例如,Logback 提供了上下文选择器,允许在其自己的上下文中创建每个 Logger。您可以使用该logging.register-shutdown-hook属性禁用关闭挂钩。将其设置为false将禁用注册。您可以在您的application.propertiesapplication.yaml文件中设置该属性:

logging.register-shutdown-hook=false

4.8. 自定义日志配置

可以通过在类路径中包含适当的库来激活各种日志系统,并且可以通过在类路径的根目录或以下 SpringEnvironment属性指定的位置提供合适的配置文件来进一步定制:logging.config.

您可以使用org.springframework.boot.logging.LoggingSystemsystem 属性强制 Spring Boot 使用特定的日志记录系统。该值应该是实现的完全限定类名LoggingSystem。您还可以使用值完全禁用 Spring Boot 的日志记录配置none。

注:由于日志记录是ApplicationContext创建之前初始化的,因此无法从@PropertySourcesSpring@Configuration文件中控制日志记录。更改日志系统或完全禁用它的唯一方法是通过系统属性。

根据您的日志系统,加载以下文件:

日志系统 定制

登录

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

日志4j2

log4j2-spring.xml 或者 log4j2.xml

JDK(Java 实用程序日志记录)

logging.properties

如果可能,我们建议您-spring为日志配置使用变体(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring 无法完全控制日志初始化。

 为了帮助定制,一些其他属性从 Spring 传输Environment到系统属性,如下表所述:

spring环境 系统属性 注释

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

记录异常时使用的转换字。

logging.file.name

LOG_FILE

如果定义,则在默认日志配置中使用。

logging.file.path

LOG_PATH

如果定义,则在默认日志配置中使用。

logging.pattern.console

CONSOLE_LOG_PATTERN

要在控制台 (stdout) 上使用的日志模式。

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

日志日期格式的 Appender 模式。

logging.charset.console

CONSOLE_LOG_CHARSET

用于控制台日志记录的字符集。

logging.pattern.file

FILE_LOG_PATTERN

要在文件中使用的日志模式(如果LOG_FILE已启用)。

logging.charset.file

FILE_LOG_CHARSET

用于文件记录的字符集(如果LOG_FILE已启用)。

logging.pattern.level

LOG_LEVEL_PATTERN

呈现日志级别时使用的格式(默认%5p)。

PID

PID

当前进程 ID(如果可能并且尚未定义为操作系统环境变量时发现)。

如果您使用的是 Logback,以下属性也会被转移:

 

spring环境 系统属性 注释

logging.logback.rollingpolicy.file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

滚动日志文件名的模式(默认${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)。

logging.logback.rollingpolicy.clean-history-on-start

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

是否在启动时清除存档日志文件。

logging.logback.rollingpolicy.max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

最大日志文件大小。

logging.logback.rollingpolicy.total-size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

要保留的日志备份的总大小。

logging.logback.rollingpolicy.max-history

LOGBACK_ROLLINGPOLICY_MAX_HISTORY

要保留的最大归档日志文件数。

所有支持的日志系统在解析其配置文件时都可以查询系统属性。有关spring-boot.jar示例,请参阅中的默认配置:

如果你想在日志属性中使用占位符,你应该使用Spring Boot 的语法而不是底层框架的语法。值得注意的是,如果您使用 Logback,您应该使用:作为属性名称与其默认值之间的分隔符,而不是使用

 您可以通过仅覆盖LOG_LEVEL_PATTERN(或logging.pattern.level使用 Logback)将 MDC 和其他临时内容添加到日志行。例如,如果您使用logging.pattern.level=user:%X{user} %5p,则默认日志格式包含“用户”的 MDC 条目(如果存在),如以下示例所示

 4.9. 回滚扩展

Spring Boot 包含许多 Logback 扩展,可以帮助进行高级配置。您可以在logback-spring.xml配置文件中使用这些扩展。

 因为标准logback.xml配置文件加载过早,所以不能在其中使用扩展。您需要使用logback-spring.xml或定义一个logging.config属性。

扩展不能与 Logback 的配置扫描一起使用。如果您尝试这样做,对配置文件进行更改会导致出现类似于以下记录之一的错误:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]


4.9.1. 特定于配置文件的配置

标签允许您根据活动的 Spring 配置文件选择性地包含或排除配置部分。元素内的任何地方都支持配置文件部分。使用该name属性指定哪个配置文件接受配置。所述标记可包含简档名称(例如staging)或轮廓表达。配置文件表达式允许表达更复杂的配置文件逻辑,例如production & (eu-central | eu-west)。查看参考指南了解更多详情。以下清单显示了三个示例配置文件:


    



    



    

 

4.9.2. 环境属性

标签允许您从 Spring 公开属性Environment以在 Logback 中使用。如果您想从application.propertiesLogback 配置中的文件访问值,这样做会很有用。该标签的工作方式与 Logback 的标准标签类似。但是,value您不是指定直接的,而是指定source属性的(来自Environment)。如果您需要将属性存储在local范围之外的其他地方,您可以使用该scope属性。如果您需要回退值(如果该属性未在 中设置Environment),您可以使用该defaultValue属性。以下示例显示了如何公开在 Logback 中使用的属性:



    ${fluentHost}
    ...

你可能感兴趣的:(java框架,spring,boot,软件框架)