51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

必须掌握SpringBoot强大的日志功能

环境:SpringBoot3.2.5



1. 简介

Spring Boot 将 Commons Logging 用于所有内部日志记录,但保留底层日志实现的开放性。为 Java Util LoggingLog4j2Logback 提供了默认配置。在每种情况下,日志记录器都预先配置为使用控制台输出,也可选择文件输出。

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

注意:

在众多 Java 日志框架。如果上述列表看起来很混乱,请不要担心。一般来说,你需要更改日志记录依赖关系,Spring Boot 的默认设置就可以正常工作。


2. 详细配置

2.1 日志格式

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

五颜六色挺好看

以上日志格式输出项说明:

  • 日期和时间:精确到毫秒,易于分类。

  • 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE。

  • 进程 ID。

  • 分隔符 ---,用于区分实际日志信息的起始位置。

  • 应用程序名称:用方括号括起来(默认情况下,只有设置了 spring.application.name 时才会记录)。

  • 线程名称:用方括号括起来。

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

  • 日志信息。

注意:

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

如果你不想记录应用的名称,你可以通过如下配置:
* *

logging:  include-application-name: false

默认情况下,会记录 ERROR 级、WARN 级和 INFO 级信息。你可以通过下面属性进行设置启动"debug"模式: *

debug: true

也可以在命令行中指定: *

java -jar app.jar --debug

当然你还可以使用trace级别 *

trace: true

这个今天看文档才注意还可以直接配置trace 。以为只有debug

2.2 日志彩色输出

如果你的终端支持 ANSI,则日志信息会使用彩色进行输出来。可以通过如下属性配置: * * * *

spring:  output:    ansi:      enabled: always

取值:DETECT , ALWAYS , NEVER

如果你的日志没有显示颜色(eclipse),那么你需要检查下面的选项是否勾选:

颜色编码通过 %clr 转换字进行配置。在最简单的形式下,转换器根据日志级别对输出进行着色,如下例所示: *

%clr(%5p)

下表描述了日志级别与颜色的映射关系:

|---------|--------| | 级别 | 颜色 | | FATAL | Red | | ERROR | Red | | WARN | Yellow | | INFO‍ | Green | | DEBUG‍‍ | Green | | TRACE | Green |

修改颜色
* * *

logging:  pattern:    console: "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss}}){yellow} %clr(${LOG_LEVEL_PATTERN:-%5p}) ..."

在日志的日历后面添加{color}指定颜色值,支持的颜色:blue, cyan, faint, green, magenta, red, yellow。

2.3 日志文件输出

默认情况下,Spring Boot 只向控制台记录日志,不写入日志文件。如果想在控制台输出之外写入日志文件,则需要设置 logging.file.name 或 logging.file.path 属性(例如,在应用程序属性中)。如下示例: * * *

logging:  file:    name: myapp.log

这将在你项目的目录下生产myapp.log日志文件

注意: 如果你下面这样配置将不会达到你的预期
* * * *

logging:  file:    name: myapp.log    path: d:/logs/

此时并不会在你的d:/logs下生产myapp.log,而只会在当前项目的根目录下生产。

这2个属性配置不能同时配置,要使路径生效,那你只能配置logging.file.path 属性并且文件名是 "spring.log"。

默认情况下,当日志文件达到 10 MB 时,日志文件会轮转,与控制台输出一样,默认情况下会记录ERROR 级、WARN 级和 INFO 级信息。

2.4 日志文件滚动Rotation

如果你使用的是 Logback,则可以使用application.properties 或application.yaml 文件对日志滚动(产生新的日志文件)设置进行微调。如下示例: * * * * * * * * * * * * *

logging:  logback:    rollingpolicy:      # 用于创建日志存档的文件名模式。      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz      # 是否应在应用程序启动时清理日志存档。      clean-history-on-start: false      # 日志文件存档前的最大大小。      max-file-size: 1KB      # 日志存档被删除前的最大容量。      total-size-cap: 0B      # 要保留的归档日志文件的最大数量(默认为 7)。      max-history: 7

接下来,我们反复重启服务几次后,你将看到如下的日志及归档文件

2.5 日志级别

通过使用 logging.level.<logger-name>=<level>,可以在 Spring 环境(例如在 application.properties 中)中设置所有支持的日志系统的日志记录器级别,其中级别为 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一。可以使用 logging.level.root 配置根日志记录器。如下示例: * * * * * * *

logging:  level:    root: info    web: debug    sql: debug    "[org.springframework.web]": "debug"    "[org.hibernate]": "debug"

当你访问Controller接口时,你将看到如下详细信息:

2.6 日志分组

将相关的日志记录器分组,以便同时对它们进行配置,通常是非常有用的。如下示例:

tomcat日志进行分组
* * *

logging:  group:    tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"

上面我们将两个包进行划分为一组,接下来就可以对tomcat这个组进行日志级别的设置。 * * *

logging:  level:    tomcat: debug

输出结果

SpringBoot提供了默认的2个分组

2.7 日志关闭钩子

为了在应用程序终止时释放日志资源,SpringBoot提供了一个关闭钩子,它将在 JVM 退出时触发日志系统清理。只要你的程序不是以 war 文件的形式部署,那么该关闭钩子会自动注册。如果您的应用程序具有复杂的上下文层次结构,关闭钩子可能无法满足您的需求。如果无法满足,请禁用关闭钩子,并研究底层日志系统直接提供的选项。你可以通过如下属性进行关闭钩子: * *

logging:  register-shutdown-hook: false

2.8 自定义日志配置

可以通过在类路径上包含适当的库来激活各种日志系统,并且可以通过在类路径的根目录中或如下属性设置指定配置文件: * *

logging:  config: logback.xml

不同的日志系统加载的配置文件,如下:

**官方建议:**日志配置中使用 -spring 变体(例如,使用 logback-spring.xml 而不是 logback.xml)。

SpringBoot提供了如下属性配置及系统属性来定制日志:

2.9 Logback扩展

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

由于标准 logback.xml 配置文件加载过早,因此无法在其中使用扩展名。您需要使用 logback-spring.xml,或定义 logging.config 属性。

特定配置文件的配置

在logback-spring.xml文件中的<springProfile> 标签,可以根据当前激活的属性进行相关的配置。如下示例: * * * * * * * * * *

<springProfile name="prod">  <root level="ERROR">    <appender-ref ref="FILEERROR" />  </root></springProfile><springProfile name="dev">  <root level="INFO">    <appender-ref ref="CONSOLE" />  </root></springProfile>

根据spring.profiles.active属性值激活不同的<root>

环境属性

<springProperty> 标签可让你公开 Spring Environment 中的属性,以便在 Logback 中使用。如果你想在 Logback 配置中访问应用程序.properties 文件中的值,这样做会很有用。该标记的工作方式与 Logback 的标准 <property> 标记类似。不过,你指定的不是直接的值,而是属性的来源(来自环境)。如下示例: * * * * * * * *

<springProperty scope="context" name="appHost" source="pack.host" defaultValue="localhost"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">  <encoder>    <!-- 日志项中引入上面定义的属性 -->    <pattern>%d{yyyy-MM-dd HH:mm} - ${appHost} - %-5level %logger Line:%-3L - %msg%n</pattern>    <charset>UTF-8</charset>  </encoder></appender>

上面示例中引用了appliation.properties或application.yml配置中的pack.host属性 * *

pack:  host: pack-host

输出结果


赞(8)
未经允许不得转载:工具盒子 » 必须掌握SpringBoot强大的日志功能