在 Spring Boot中配置日志

本文介绍了SpringBoot中日志的基本使用、配置方法及最佳实践,包括日志级别的调整、日志文件的设置、日志模式的自定义以及颜色编码的应用等。

Spring Boot 在引擎盖下使用Apache Commons Logging。但是,它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。

目录

概述

默认情况下,如果使用启动器,则应用程序将使用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 的默认记录器格式/模式如下所示。

对于许多人来说,这种充满活力的伐木模式绰绰有余。但是,如果您希望更改此日志模式,则可以使用“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.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。

### Spring Boot 日志配置教程 #### 默认日志框架 Spring Boot 使用 `Logback` 作为默认的日志实现框架[^2]。这意味着,在不进行额外配置的情况下,Spring Boot 将会基于 Logback 提供的日志记录功能来处理应用程序中的日志。 #### 配置方式 可以通过两种方式进行日志配置: 1. **修改 application.properties 或 application.yml 文件** 这是最简单的方式之一,允许开发者通过简单的键值对形式调整日志行为。例如: ```properties logging.level.root=INFO logging.level.org.springframework.web=DEBUG logging.file.name=myapp.log ``` 上述配置表示设置根日志级别为 INFO,并针对特定包(org.springframework.web)启用 DEBUG 级别的日志输出,同时指定日志文件名为 myapp.log。 2. **外部化日志配置文件** 如果需要更复杂的日志管理逻辑,则可以选择创建独立的 XML 配置文件并将其加载到项目中。对于 Logback,默认支持读取位于 classpath 下的 `logback-spring.xml` 文件。示例如下: ```xml <configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>myapp.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE"/> </root> </configuration> ``` 该片段展示了如何定义一个写入磁盘的日志追加器,并设置了全局日志级别为 info。 #### 替换默认日志框架至 Log4j2 如果偏好使用其他日志框架如 Log4j2 而不是默认的 Logback ,则需执行以下操作步骤: - 排除 spring-boot-starter-logging 对应依赖项; - 添加 spring-boot-starter-log4j2 到 build.gradle 或 pom.xml 中; 具体代码样例如下所示 (Gradle 版本): ```gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter' // Exclude default logging dependency exclude group: "org.springframework.boot", module: "spring-boot-starter-logging" // Add log4j2 starter instead implementation 'org.springframework.boot:spring-boot-starter-log4j2' } ``` 接着按照官方文档指引完成相应 xml/json/yaml 格式的 log4j2 configuration file 创建工作即可[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值