一、 概述
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 多克 多克创新科技企业店-淘宝网全品优惠