Springboot日志记录方案—官方原版

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Springboot日志记录方案—官方原版

一、 概述

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

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

二、日志格式

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

2023-02-23T14:18:26.407Z  INFO 20239 --- [           main] o.s.b.d.f.s.MyApplication                : Starting MyApplication using Java 17.0.6 with PID 20239 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2023-02-23T14:18:26.414Z  INFO 20239 --- [           main] o.s.b.d.f.s.MyApplication                : No active profile set, falling back to 1 default profile: "default"
2023-02-23T14:18:28.434Z  INFO 20239 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-02-23T14:18:28.563Z  INFO 20239 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-02-23T14:18:28.563Z  INFO 20239 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.5]
2023-02-23T14:18:28.976Z  INFO 20239 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-02-23T14:18:28.990Z  INFO 20239 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2444 ms
2023-02-23T14:18:32.397Z  INFO 20239 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-02-23T14:18:32.438Z  INFO 20239 --- [           main] o.s.b.d.f.s.MyApplication                : Started MyApplication in 7.241 seconds (process running for 8.232)
  • 输出以下项目:
  • 日期和时间:毫秒精度,易于排序。
  • 日志级别:错误、警告、信息、调试或跟踪。
  • 进程ID。
  • 分隔符,用于区分实际日志消息的开头。
  • 线程名称:用方括号括起来(对于控制台输出,可以截断)。
  • 记录器名称:这通常是源类名(通常缩写)。
  • 日志消息。

三、控制台输出

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

$ java -jar myapp.jar --debug

启用调试模式后,将配置一组核心记录器(嵌入式容器、Hibernate和Spring Boot)以输出更多信息。启用调试模式不会将应用程序配置为使用debug级别记录所有消息。

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

四、不同颜色编码输出

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

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

%clr(%5p)

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

Level

Color

FATAL

Red

ERROR

Red

WARN

Yellow

INFO

Green

DEBUG

Green

TRACE

Green

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

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

支持以下颜色和样式:

  • blue
  • cyan
  • faint
  • green
  • magenta
  • red
  • yellow

五、文件输出

默认情况下,Spring Boot只记录到控制台,不写入日志文件。如果要在控制台输出之外写入日志文件,则需要设置logging.file.name或logging.file.path属性(例如,在application.properties中)。

下表显示了logging.*财产如何一起使用:

表 8.日志记录属性

logging.file.name

logging.file.path

Example

Description

(none)

(none)

仅控制台日志记录。

Specific file

(none)

my.log

写入指定的日志文件。 名称可以是确切的位置,也可以是相对于当前目录的位置。

(none)

Specific directory

/var/log

将spring.log写入指定目录。名称可以是确切的位置或相对于当前目录。

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

七、文件转换

如果使用Logback,则可以使用application.properties或application.yaml文件微调日志轮换设置。对于所有其他日志记录系统,您需要自己直接配置旋转设置(例如,如果使用Log4j2,则可以添加Log4j2.xml或Log4j2-pring.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)。

八、日志级别

所有支持的日志记录系统都可以通过使用logging.level.<logger-name>=<level>在Spring环境中设置日志记录程序级别(例如,在application.properties中),其中级别是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF之一。根日志记录程序可以通过使用日志记录.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变量。

九、日志组

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

为了帮助实现这一点,Spring Boot允许您在Spring环境中定义日志组。例如,以下是如何通过将“tomcat”组添加到您的application.properties:

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

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

logging.level.tomcat=trace

Spring Boot包括以下预定义的日志记录组,可以立即使用:

Name

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

十、使用日志关闭钩子

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

logging.register-shutdown-hook=false

十一、自定义日志配置

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

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

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

Logging System

Customization

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环境传输到系统财产,如下表所述:

Spring Environment

System Property

Comments

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

The conversion word used when logging exceptions.

logging.file.name

LOG_FILE

If defined, it is used in the default log configuration.

logging.file.path

LOG_PATH

If defined, it is used in the default log configuration.

logging.pattern.console

CONSOLE_LOG_PATTERN

The log pattern to use on the console (stdout).

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

Appender pattern for log date format.

logging.charset.console

CONSOLE_LOG_CHARSET

The charset to use for console logging.

logging.pattern.file

FILE_LOG_PATTERN

The log pattern to use in a file (if LOG_FILE is enabled).

logging.charset.file

FILE_LOG_CHARSET

The charset to use for file logging (if LOG_FILE is enabled).

logging.pattern.level

LOG_LEVEL_PATTERN

The format to use when rendering the log level (default %5p).

PID

PID

The current process ID (discovered if possible and when not already defined as an OS environment variable).

如果使用 Logback,则还会传输以下属性:

Spring Environment

System Property

Comments

logging.logback.rollingpolicy.file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

Pattern for rolled-over log file names (default ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz).

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

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

Whether to clean the archive log files on startup.

logging.logback.rollingpolicy.max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

Maximum log file size.

logging.logback.rollingpolicy.total-size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

Total size of log backups to be kept.

logging.logback.rollingpolicy.max-history

LOGBACK_ROLLINGPOLICY_MAX_HISTORY

Maximum number of archive log files to keep

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

  • Logback
  • Log4j 2
  • Java Util logging

十二、示例

Spring Boot 没有强制性的日志记录依赖项,除了通常由 Spring Framework 模块提供的 Commons Logging API。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是通过启动器,这完全取决于 . 对于 Web 应用程序,您只需要 ,因为它以传递方式依赖于日志记录启动器。 如果使用 Maven,则以下依赖项会为您添加日志记录:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot 有一个抽象,它试图根据类路径的内容配置日志记录。 如果 Logback 可用,则它是首选。LoggingSystem

如果需要对日志记录进行的唯一更改是设置各种记录器的级别,则可以使用“logging.level”前缀执行此操作,如以下示例所示:application.properties

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

除了控制台之外,您还可以使用 设置要将日志写入的文件的位置。要配置日志记录系统的更细粒度设置,您需要使用相关支持的本机配置格式。 默认情况下,Spring 引导从系统的默认位置(例如 Logback)选取本机配置,但您可以使用该属性设置配置文件的位置。

1、为日志记录配置回日志

如果需要将自定义应用于 logback,而不是可以使用 实现的自定义项,则需要添加标准 logback 配置文件。 您可以将文件添加到类路径的根目录中,以便进行回查

Spring 引导提供了许多登录配置,这些配置可以在您自己的配置中。 这些包括旨在允许重新应用某些常见的 Spring 引导约定。included

以下文件在 下提供:org/springframework/boot/logging/logback/

  • defaults.xml- 提供转换规则、模式属性和常用记录器配置。
  • console-appender.xml- 使用 .ConsoleAppenderCONSOLE_LOG_PATTERN
  • file-appender.xml- 使用适当的设置添加 和。RollingFileAppenderFILE_LOG_PATTERNROLLING_FILE_NAME_PATTERN

此外,还提供了旧文件以与早期版本的 Spring Boot 兼容。base.xml

典型的自定义文件如下所示:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
    <logger name="org.springframework.web" level="DEBUG"/>
</configuration>

您的登录配置文件还可以利用负责为您创建的系统属性:

  • ${PID}:当前进程 ID。
  • ${LOG_FILE}:是否在引导的外部配置中设置。logging.file.name
  • ${LOG_PATH}:是否在 Boot 的外部配置中设置了(表示日志文件所在的目录)。logging.file.path
  • ${LOG_EXCEPTION_CONVERSION_WORD}:是否在引导的外部配置中设置。logging.exception-conversion-word
  • ${ROLLING_FILE_NAME_PATTERN}:是否在引导的外部配置中设置。logging.pattern.rolling-file-name

Spring Boot 还通过使用自定义 Logback 转换器在控制台上(但不在日志文件中)提供了一些不错的 ANSI 颜色终端输出

2、配置 log4j 用于日志记录

Spring Boot 支持 Log4j 2 进行日志记录配置,如果它位于类路径上。 如果使用启动器来组装依赖项,则必须排除 Logback,然后改为包含 Log4j 2。 如果您不使用启动器,除了 Log4j 2 之外,您还需要(至少)提供。

推荐的路径是通过启动器,即使它需要一些摇晃。 以下示例显示了如何在 Maven 中设置启动器:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4j2Test {
    private static final Logger logger = LogManager.getLogger();
    public Log4j2Test(){
        logger.info( "Hello World!" );
    }
}






 官网:Doker 多克; 官方旗舰店首页-Doker 多克 多克创新科技企业店-淘宝网全品优惠

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
44 5
|
17天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
33 1
|
18天前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
19 2
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
130 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
2月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
1月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
1月前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
37 0
|
2月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
229 1