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 提供了Websql以及日志记录组,以便我们可以轻松地配置它们以进行调试。

将日志写入文件

默认情况下,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 的默认记录器格式/模式如下所示。

springboot 记录mysql慢日志 springboot日志存储_日志记录

对于许多人来说,这种充满活力的伐木模式绰绰有余。但是,如果您希望更改此日志模式,则可以使用“logging.pattern.console”和“logging.pattern.file”属性。

在下面的示例中,我们可以看到覆盖日志格式是多么容易。



logging.pattern.console=%p %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %-40.40logger{39} : %m%n




springboot 记录mysql慢日志 springboot日志存储_log4j_02


如图所示,日志级别位于行首,不再有鲜艳的颜色。有关详细信息,请查看登录模式文档

对日志条目进行颜色编码

在支持 ANSI 颜色的环境中,您可以使用可以使用不同颜色的不同日志组件的模式。例如,可以使用 %clr(%p) 通过日志记录级别来设置颜色。此处,%p 表示日志记录级别。

springboot 记录mysql慢日志 springboot日志存储_java_03

在这里,所有的颜色映射都由弹簧启动提供。如果您希望为日志组件指定颜色,也可以这样做。



logging.pattern.console=%clr(%p) %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %clr(%-40.40logger{39}){red} : %m%n

上述配置的结果是,

springboot 记录mysql慢日志 springboot日志存储_java_04

logging.pattern.file设置颜色编码是没有意义的,因为文件不会转换 ANSI 颜色编码。所以你会看到一堆胡言乱语。

自定义日志记录配置文件

所有这些默认行为都是可能的,因为 Spring 引导附带了默认的日志记录配置文件。它还为我们提供了在某种程度上配置这些配置的方法。

但是,如果您希望使用更野蛮的配置,那么您也可以提供自己的配置。只需在src/main/resources/下提供一个logback.xmllogback-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。