Spring Boot 在引擎盖下使用Apache Commons Logging。但是,它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。
目录
- 概述
- 简单日志记录示例
- 配置日志记录
- 更改日志级别
- 将日志写入文件
- 在 Spring 引导中更改日志记录模式
- 对日志条目进行颜色编码
- 自定义日志记录配置文件
- Log4j2 用于 Spring 引导日志记录
- 总结
- 相关
概述
默认情况下,如果使用启动器,则应用程序将使用Logback进行日志记录。该框架还提供各种日志路由,以确保其他日志记录库开箱即用。这样,您可以将 Logback 与 Log4j2 或 JUL 交换。
在进一步讨论之前,有许多用于Java的日志记录框架。在大多数情况下,您不需要在 Spring 引导中更改日志记录依赖项。
简单日志记录示例
让我们使用示例控制器演示 spring-boot 中的日志记录。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
public class TestController {
private static final Logger log = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/test")
@ResponseBody
String hello(@RequestParam("name") String name) {
log.trace("Hello {}", name);
log.debug("Hello {}", name);
log.info("Hello {}", name);
log.warn("Hello {}", name);
log.error("Hello {}", name);
return "Hello";
}
}
使用上述控制器,如果您点击http://localhost:8080/test?name=John Doe,那么您将在控制台输出中看到一些日志。就是这样,您已经在项目中成功使用了日志记录。
最好的部分是,您没有配置任何内容。
配置日志记录
Spring 引导带有一些用于日志记录的默认配置。例如,它开箱即用地打印到控制台,它具有详细的消息日志模式,我们将详细查看,最后,它仅打印具有 INFO 或更高版本的日志级别。
让我们看看如何覆盖这些行为。
更改日志级别
如果您已经看到了上一节中的示例,则日志将仅包含 INFO 或更高版本的打印条目。但是,如果您希望覆盖此行为,则 Spring boot 允许您根据类和包配置日志记录级别。
例如,您可以为TestController启用跟踪日志,如下所示。
logging.level.com.springhow.examples.logging.controllers.TestController=TRACE
如果您希望为包下的所有类启用调试日志,则可以像下面这样操作。
logging.level.com.springhow.examples.logging.controllers=DEBUG
您还可以将不同的包和类分组到组中。例如,可以将与 API 相关的所有包列出到记录器组中。然后,您可以为其指定日志记录级别。
#Define a group logging.group.api=com.springhow.web,com.springhow.services,com.springhow.domain #Specify a logging level for that group logging.level.api=DEBUG
使用此方法,您无需定义三个单独的日志记录级别。此外,它使配置文件看起来干净。
为了方便起见,Spring boot 提供了Web和sql以及日志记录组,以便我们可以轻松地配置它们以进行调试。
将日志写入文件
默认情况下,Spring 引导将所有日志打印到控制台。但是,通过以下配置,您也可以启用基于文件的日志记录。例如,以下配置在当前工作目录中创建一个日志文件。
logging.file.name=springhow.log
您还可以为文件名提供完整路径
logging.file.name=/var/log/springhow.log
或者,您可以提供日志记录文件路径。
logging.file.path=/var/log/
使用“logging.file.path”的唯一例外是 Spring boot 将在给定路径下创建一个名为 “spring.log” 的日志文件。
对于WINDOWS,所有绝对路径都从C:\drive 转换。因此,“/var/log/”变为“c:\var\log\”。
最重要的是,如果您同时使用 logging.file.name和logging.file.path,则logging.file.name将优先。
在 Spring 引导中更改日志记录模式
Spring Boot 的默认记录器格式/模式如下所示。
对于许多人来说,这种充满活力的伐木模式绰绰有余。但是,如果您希望更改此日志模式,则可以使用“logging.pattern.console”和“logging.pattern.file”属性。
在下面的示例中,我们可以看到覆盖日志格式是多么容易。
logging.pattern.console=%p %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %-40.40logger{39} : %m%n
如图所示,日志级别位于行首,不再有鲜艳的颜色。有关详细信息,请查看登录模式文档。
对日志条目进行颜色编码
在支持 ANSI 颜色的环境中,您可以使用可以使用不同颜色的不同日志组件的模式。例如,可以使用 %clr(%p) 通过日志记录级别来设置颜色。此处,%p 表示日志记录级别。
在这里,所有的颜色映射都由弹簧启动提供。如果您希望为日志组件指定颜色,也可以这样做。
logging.pattern.console=%clr(%p) %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %clr(%-40.40logger{39}){red} : %m%n
上述配置的结果是,
为logging.pattern.file设置颜色编码是没有意义的,因为文件不会转换 ANSI 颜色编码。所以你会看到一堆胡言乱语。
自定义日志记录配置文件
所有这些默认行为都是可能的,因为 Spring 引导附带了默认的日志记录配置文件。它还为我们提供了在某种程度上配置这些配置的方法。
但是,如果您希望使用更野蛮的配置,那么您也可以提供自己的配置。只需在src/main/resources/下提供一个logback.xml或logback-spring.xml您就可以开始了。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
请注意,一旦您添加 logback.xml,就无法通过application.properties 自定义日志记录。
您还可以使用“logging.config”属性从外部位置加载日志记录配置。
logging.config=/etc/myapp/logback.xml
使用自定义配置,您几乎可以执行上述所有自定义。但唯一的问题是,您无法轻松地将 Spring 启动应用程序切换到不同的日志记录系统。例如,如果要切换到 Log4j2,则需要为该特定系统重新创建配置。
Log4j2 用于 Spring 引导日志记录
如果您没有自定义配置,那么在 Spring 启动中更改日志记录系统非常简单。例如,您可以通过使用 spring-boot-starter-log4j2 删除默认的spring-boot-starter-logging来交换到Log4J2。
日志记录启动器是核心启动器(弹簧启动启动器)的一部分。因此,您可以安全地从那里删除日志记录启动器。
<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>
即使您有许多不同的启动器,例如“web”,“jpa”等,它们现在都将排除用于日志记录的启动器,并将使用log4j2中的配置。最好的部分是,您不必更改 application.properties( 如果您尚未指定与 logback 相关的任何内容)。
总结
到目前为止,我们学习了 Spring 引导中的日志记录如何工作,如何配置它们,以及如何在 Spring 引导应用程序中用 log4j2 替换 logback。
相关
- Apache Commons Logging – 解释
- 在 Spring 引导中添加 Servlet 过滤器的方法
- 在 Spring 引导中显示来自 Spring Data JPA/hibernate 的 SQL
- 春季启动横幅 – 完整指南
- Spring 框架中的 Setter 依赖注入