Spring Boot – 日志记录
任何软件项目都需要一个良好的日志记录基础设施,因为它不仅有助于了解应用程序正在发生的事情,而且还有助于跟踪项目中出现的任何异常事件或错误。本文介绍了通过简单的配置在 Spring Boot 项目中启用日志记录的几种方法。让我们首先进行初始设置以更深入地探索每个选项。
初始设置
为了使用 Spring Initializer 创建一个简单的 Spring Boot 项目,请参考这篇文章。让我们定义一个简单的 Rest Controller,它输出各种级别的日志消息。
Java
// Rest Controller to print various log level messages
package com.log.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogController {
// creating a logger
Logger logger
= LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log") public String log()
{
// Logging various log level messages
logger.trace("Log level: TRACE");
logger.info("Log level: INFO");
logger.debug("Log level: DEBUG");
logger.error("Log level: ERROR");
logger.warn("Log level: WARN");
return "Hey! You can check the output in the logs";
}
}
XML
%white(%d{ISO8601}) %highlight(%-5level) [%yellow(%t)] : %msg%n%throwable
${LOG_PATH}/${LOG_FILE_NAME}.log
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
${LOG_PATH}/archived/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log
10MB
XML
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
XML
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
现在我们只需要运行应用程序并点击http://localhost:8080/log即可查看日志消息。
无配置的默认日志记录
Spring boot 允许我们在控制台中查看日志,即使我们没有为其提供任何特定配置。这是因为 Spring Boot 使用Logback作为其默认日志记录。 Spring boot 的内部日志提供程序是 A pache Commons ,它提供对Java Util Logging 、 Log4j2和Logback的支持。因此 Apache Commons 必须手动导入,直到 spring boot 1.x。但是,从 spring boot 2.x 开始,它是通过传递下载的。更具体地说,Spring boot 启动器,例如spring-boot-starter-web导入spring-boot-starter-logging ,它会自动拉入 Logback。在运行应用程序并访问http://localhost:8080/log页面时,我们可以在控制台中看到以下输出:
日志格式和 ANSI 颜色由 Spring Boot 预先配置,以使日志记录更具可读性。日志输出中存在以下组件:
- 记录日期
- 毫秒精度的时间
- 日志级别默认显示 INFO、WARN 和 ERROR
- 进程 ID
- — 作为分隔符
- 方括号中的线程名称
- 显示源类名称的记录器的名称
- 日志消息
控制台输出
Spring boot 支持的日志级别是TRACE 、 INFO 、 DEBUG 、 ERROR和WARN 。默认情况下,ERROR、INFO 和 WARN 会打印到控制台。可以通过使用–debug标志或–trace标志启动应用程序来激活调试和跟踪级别,如下所示:
java -jar target/log-0.0.1-SNAPSHOT.jar –debug
java -jar target/log-0.0.1-SNAPSHOT.jar –trace
或者,这也可以通过在application.properties文件中添加以下属性来完成。
debug=true
trace=true
颜色编码输出
如果您的终端支持 ANSI,则可以在控制台中看到颜色编码的日志输出。可以在application.properties文件中设置以下属性以获取颜色编码的输出:
spring.output.ansi.enabled=always
记录到文件
Spring boot 默认只记录到控制台。为了登录文件,需要将以下属性添加到application.properties文件中:
logging.file.path=logs/
logging.file.name=logs/application.log
添加这些属性后,如果我们运行 spring boot 应用程序并访问页面http://localhost:8080/log ,我们可以在控制台和日志文件中看到日志。在当前路径中创建一个名为logs的新文件夹,在该文件夹中是名为application.log 的日志文件。日志文件内容如下:
使用 Logback 配置进行日志记录
Spring boot 允许以特定方式配置logback以满足我们项目的要求。为此,我们需要定义一个配置文件,我们可以在其中指定日志记录模式、颜色、文件日志记录和控制台日志记录的不同属性,以及有效的滚动策略以防止创建巨大的日志文件。每当 Spring boot 找到具有以下任何名称的文件时,它都会自动覆盖默认配置。
- logback-spring.groovy
- logback.groovy
- logback-spring.xml
- logback.xml
现在让我们创建一个简单的 logback-spring.xml 文件
XML
%white(%d{ISO8601}) %highlight(%-5level) [%yellow(%t)] : %msg%n%throwable
${LOG_PATH}/${LOG_FILE_NAME}.log
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
${LOG_PATH}/archived/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log
10MB
在运行应用程序并访问页面http://localhost:8080/log 时,我们会收到以下控制台输出:
控制台输出与logback-spring.xml文件中定义的日志记录模式和颜色一致。在当前路径中的 /logs 文件夹中创建一个名为application-logback.log的新日志文件,该文件通过滚动策略存档。日志文件输出如下:
使用 Log4j2 配置进行日志记录
为了使用 log4j2,我们需要从我们的 starter 依赖中排除 Logback,并添加 log4j2 的依赖,如下所示:
XML
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
接下来,我们需要为 Log4j2 定义配置文件。当 spring boot 找到具有以下任何名称的文件时,它会自动覆盖默认配置。
- log4j2-spring.xml
- log4j2.xml
现在让我们创建一个简单的 log4j2-spring.xml 文件,如下所示:
XML
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n
在运行应用程序并访问页面http://localhost:8080/log时,我们会收到以下控制台输出:
控制台输出与logback-Log4j2.xml文件中定义的日志记录模式和颜色一致。一个名为application-Log4j2.log的新日志文件将在当前路径中的 /logs 文件夹中创建,该文件夹通过滚动策略进行归档。日志文件输出如下: