4.4。日志

Spring Boot使用Commons Logging进行所有内部日志记录,但是使底层日志实现打开状态。为Java Util LoggingLog4J2Logback提供了默认配置。在每种情况下,记录器都已预先配置为使用控制台输出,同时还提供可选文件输出。

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

4.4.1。日志格式

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

2019-11-11 11:51:57.697  INFO 16640 --- [           main] study.hwj.springboot.MyApplication       : The following profiles are active: dev
2019-11-11 11:51:58.910 INFO 16640 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
  • 日期和时间:毫秒精度,易于排序。
  • 日志级别:ERROR,WARN,INFO,DEBUG,或TRACE。
  • 进程ID。
  • --- 分隔符来区分实际日志消息的开始。
  • 线程名称:用方括号括起来(对于控制台输出可能会被截断)。
  • Logger名称:这通常是源类名称(通常缩写)。
  • 日志消息。

Logback没有FATAL级别。它被映射到ERROR。

4.4.2。控制台输出

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

颜色编码输出

如果您的终端支持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.3。文件输出

默认情况下,Spring Boot仅记录到控制台,不写日志文件。如果除了控制台输出外还想写日志文件,则需要设置一个logging.file.namelogging.file.path属性(例如,在application.properties中)。

日志记录属性:

logging.file.name logging.file.path 示例 描述
(没有) (没有) 仅控制台记录。
特定文件 (没有) my.log 写入指定的日志文件。名称可以是确切位置,也可以是相对于当前目录的位置。
(没有) 具体目录 /var/log 写入spring.log指定的目录。名称可以是确切位置,也可以是相对于当前目录的位置。

日志文件达到10 MB时会旋转,并且与控制台输出一样,默认情况下会记录ERROR,WARN和INFO消息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则以前旋转的文件将无限期存档。日志档案的总大小可以使用logging.file.total-size-cap设置上限。当日志归档的总大小超过该阈值时,将删除备份。要在应用程序启动时强制清除日志存档,请使用logging.file.clean-history-on-start属性。

日志记录属性独立于实际的日志记录基础结构。结果,Spring Boot不会管理特定的配置键(例如Logback的logback.configurationFile)。

4.4.4。日志级别

所有支持的日志系统可以在Spring Environment设置日志级别(例如,通过使用application.properties),logging.level.<logger-name>=<level>,其中level为TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一。root Logger可以通过使用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.web为DEBUG。

以上方法仅适用于程序包级别的日志记录。由于宽松的绑定总是将环境变量转换为小写,因此无法以这种方式为单个类配置日志记录。如果需要为类配置日志记录,则可以使用该SPRING_APPLICATION_JSON变量。

4.4.5。日志组

能够将相关记录器分组在一起通常很有用,以便可以同时配置它们。例如,您可能通常会更改所有与Tomcat相关的记录器的记录级别,但是您不容易记住顶层软件包。

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

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

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

logging.level.tomcat=TRACE

Spring Boot包含以下预定义的日志记录组,它们可以直接使用:

名称 Loggers
web org.springframework.core.codec,org.springframework.http,org.springframework.web,org.springframework.boot.actuate.endpoint.web,org.springframework.boot.web.servlet.ServletContextInitializerBeans
sql org.springframework.jdbc.core,org.hibernate.SQL,org.jooq.tools.LoggerListener

4.4.6。自定义日志配置

可以通过在类路径中包含适当的库来激活各种日志记录系统,并可以通过在类路径的根目录或Spring Environment属性logging.config指定的位置中提供适当的配置文件来进一步自定义各种日志记录系统。

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

-Dorg.springframework.boot.logging.LoggingSystem=none

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

根据不同的日志系统加载不同的配置文件:

日志系统 日志系统配置文件
Logback logback-spring.xml, logback-spring.groovy,logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

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

从“可执行jar”运行时,Java Util Logging存在一些已知的类加载问题,这些问题会引起问题。我们建议您尽可能从“可执行jar”运行时避免使用它。

为了帮助进行自定义,如下表所述,一些在Spring Environment中的属性也可以在System属性中配置:

Spring Environment System Property 备注
logging.exception-conversion-word LOG_EXCEPTION_CONVERSION_WORD 记录异常时使用的转换字。
logging.file.clean-history-on-start LOG_FILE_CLEAN_HISTORY_ON_START 是否在启动时清除存档日志文件(如果启用了LOG_FILE)。(仅默认的Logback设置受支持。)
logging.file.name 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.file.path LOG_PATH 如果定义,它将在默认日志配置中使用。
logging.file.total-size-cap LOG_FILE_TOTAL_SIZE_CAP 要保留的日志备份的总大小(如果启用了LOG_FILE)。(仅默认的Logback设置受支持。)
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设置受支持。)
logging.pattern.rolling-file-name ROLLING_FILE_NAME_PATTERN 过渡日志文件名的模式(默认${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)。(仅默认的Logback设置受支持。)
PID PID 当前进程ID(如果可能,并且尚未将其定义为OS环境变量时,将被发现)。

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

  • Logback
  • Log4j 2
  • Java Util logging

如果要在日志记录属性中使用占位符,则应使用Spring Boot的语法而不是基础框架的语法。值得注意的是,如果您使用Logback,则应将 : 用作属性名称与其默认值之间的分隔符,而不应使用 :-

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

2019-11-11 15:38:24.830 requestId:c60b9602-d273-4173-8ca2-2a3f2f2b438d  INFO 1980 --- [nio-8080-exec-1] study.hwj.springboot.MyController        : MyController...ttttt

MDC使用参考

4.4.7。Logback扩展

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]]

特定于Profile的配置

使用<springProfile>标签,您可以根据激活的Spring Profiles选择包括或排除配置部分。Profile部分在<configuration>标签内的任何位置都受支持。使用name属性指定哪个 Profile 接受配置。<springProfile>标签可包含一个简单的 Profile 的名称(例如staging)或 Profile 表达式。Profile 表达式允许表达更复杂的 Profile 逻辑,例如production & (eu-central | eu-west)。有关更多详细信息,请参阅参考指南。以下清单显示了三个样本 Profiles:

<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile> <springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile> <springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

环境特性

<springProperty>标签可以让你公开Spring Environment属性让Logback使用。如果您想从Logback配置中访问application.properties文件中的值,这样做会很有用。该标签的工作方式类似于Logback的标准<property>标签。但是,您无需直接指定value,而是指定source属性(来自Environment)。如果需要将属性存储在local范围之外的其他位置,则可以使用scope属性。如果需要fallback值(以防未在Environment中设置属性),则可以使用defaultValue属性。以下示例显示如何公开在Logback中使用的属性:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>

source属性必须是短横线式语法(例如my.property-name)。但是,可以使用宽松规则将属性添加到Environment中。

Spring Boot日志原理

参考源码:

使用org.springframework.boot.context.logging.LoggingApplicationListener监听器监听多个事件:

ApplicationStartingEvent.class,
ApplicationEnvironmentPreparedEvent.class,
ApplicationPreparedEvent.class,
ContextClosedEvent.class,
ApplicationFailedEvent.class

在触发ApplicationStartingEvent事件时,初始化日志系统,参考org.springframework.boot.logging.LoggingSystem#get(java.lang.ClassLoader)

20191112 Spring Boot官方文档学习(4.4)的更多相关文章

  1. 20191112 Spring Boot官方文档学习(4.3)

    4.3.Profiles Spring Profiles提供了一种隔离部分应用程序配置并使之仅在某些环境中可用的方法.任何@Component,@Configuration或@Configuratio ...

  2. 20191112 Spring Boot官方文档学习(4.5-4.6)

    4.5.国际化 Spring Boot支持本地化消息,因此您的应用程序可以迎合不同语言首选项的用户.默认情况下,Spring Boot messages在类路径的根目录下查找message resou ...

  3. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  4. Spring boot官方文档学习(一)

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  5. 20191106 Spring Boot官方文档学习(1-2)

    学习内容相关信息 最新版本:2.2.0 CURRENT GA 官网地址 官方文档地址 单页版文档地址 代码生成网址 2.入门 Spring Boot的主要目标是: 为所有Spring开发提供更快且入门 ...

  6. 20191127 Spring Boot官方文档学习(9.1-9.3)

    9."使用方法"指南 9.1.Spring Boot应用程序 9.1.1.创建自己的FailureAnalyzer FailureAnalyzer被包装在FailureAnalys ...

  7. 20191110 Spring Boot官方文档学习(3)

    3.使用Spring Boot 3.1.构建系统 建议选择Maven或Gradle作为构建工具 每个Spring Boot版本都提供了它所支持的依赖关系的精选列表.实际上,您不需要为构建配置中的所有这 ...

  8. 20191128 Spring Boot官方文档学习(9.4-9.8)

    9.4.Spring MVC Spring Boot有许多启动器包含Spring MVC.请注意,一些启动器包括对Spring MVC的依赖,而不是直接包含它. 9.4.1.编写JSON REST服务 ...

  9. 20191128 Spring Boot官方文档学习【目录】

    Spring Boot文档 入门 使用Spring Boot 3.1. 构建系统 3.2. 结构化代码 3.3. 配置类 3.4. 自动配置 3.5. Spring beans和依赖注入 3.6. 使 ...

随机推荐

  1. mysql慢查询分析

    mysql慢查询分析 Posted: 29. 08. 2014 | Author: zdz | Category: mysql MySQL 慢查询日志分析 1. pt-query-digest分析慢查 ...

  2. ESP8266 SPI通信

    设备与设备之间的通信往往都伴随着总线的使用,而用得比较多的就当属于SPI总线和I2C总线,而恰巧NodeMcu也支持这两种总线通信 1. SPI总线——SPI类库的使用 SPI是串行外设接口(Seri ...

  3. php7魔术方法

    抽空把php7的魔术方法复习一下,大致如下 __constract:在实例化一个类时,触发 __destruct:在一个实例对象被销毁的时候触发 __set(string $name , mixed ...

  4. jquery lt选择器 语法

    jquery lt选择器 语法 作用::lt 选择器选取带有小于指定 index 值的元素.index 值从 0 开始.经常与其他元素/选择器一起使用,来选择指定的组中特定序号之前的元素(如上面的例子 ...

  5. XML 浏览器支持

    几乎所有的主流浏览器均支持 XML 和 XSLT. Mozilla Firefox 从 1.0.2 版本开始,Firefox 就已开始支持 XML 和 XSLT(包括 CSS). Mozilla Mo ...

  6. 牛客网 TaoTao要吃鸡 ( 0/1背包变形 )

    题意 : 题目链接 分析 :  如果没有 BUG (即 h == 0 的时候)就是一个普通的 0 / 1 背包 需要讨论一下 h != 0 的情况 此时有就相当于有物品是有特权的 而且背包装有特权的物 ...

  7. #417 Div2 Problem B Sagheer, the Hausmeister (DFS && 枚举)

    题目链接:http://codeforces.com/contest/812/problem/B 题意 : 给出一个 n (1 ≤ n ≤ 15)层的教学楼, 每一层楼包含 m (1 ≤ m ≤ 10 ...

  8. floor函数用法

    floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个 ...

  9. hdu_3466(01背包)

    其实,就是让C商品的q不等于p,其他都相同,这时,你就会发现如果要买C商品的话,肯定得先买C商品,因为买C商品的代价最大.所以,我们可以按照qi-pi的顺序来确定大顺序.这里我们还可以用更严谨的方式来 ...

  10. R 去掉非零元素

    X <- X[X!=] Malign_score <- Malign_score[Malign_score>=0.0008]