Spring Boot 3 【六】一文读懂 Logback 日志框架

在 Spring Boot 应用中,Logback 是一个强大的日志框架,它提供了灵活的配置和丰富的功能,帮助我们有效地记录应用程序的运行状态和错误信息。本文将深入讲解 Spring Boot 中 Logback 的代码配置。

一、Logback 简介

Logback 是一个开源的日志框架,它是由 log4j 的创始人 Ceki Gülcü 开发的。Logback 旨在提供比 log4j 更高效、更灵活的日志解决方案。它具有以下特点:

  • 高效性:Logback 的性能比 log4j 更好,特别是在高并发的情况下。
  • 灵活性:Logback 提供了丰富的配置选项,可以根据不同的需求进行定制。
  • 可扩展性:Logback 可以通过插件的方式进行扩展,满足各种特殊的日志需求。

二、Logback 的配置文件

在 Spring Boot 中,Logback 的配置文件通常命名为 logback-spring.xml,它位于项目的 src/main/resources 目录下。以下是一个基本的 Logback 配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义日志输出的格式 -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>app.log</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 定义日志级别 -->
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

1. 定义日志输出格式

在配置文件中,我们首先定义了一个名为 LOG_PATTERN 的属性,它用于指定日志输出的格式。在这个示例中,我们使用了 %d{yyyy-MM-dd HH:mm:ss.SSS} 来输出日期和时间,[%thread] 来输出线程名,%-5level 来输出日志级别,%logger{36} 来输出日志记录器的名称,- %msg%n 来输出日志消息。

2. 控制台输出

接下来,我们定义了一个名为 consoleConsoleAppender,它用于将日志输出到控制台。在 ConsoleAppender 中,我们使用了之前定义的 LOG_PATTERN 来指定日志输出的格式。

3. 文件输出

然后,我们定义了一个名为 fileFileAppender,它用于将日志输出到文件。在 FileAppender 中,我们指定了日志文件的名称为 app.log,并使用了之前定义的 LOG_PATTERN 来指定日志输出的格式。

4. 定义日志级别

最后,我们定义了一个名为 root 的日志记录器,它用于指定所有日志的级别为 info。在 root 日志记录器中,我们引用了之前定义的 consolefile 两个 Appender,这意味着日志将同时输出到控制台和文件中。

三、Logback 最佳实践总结

1. 日志级别管理

  • 根日志级别设置: 在 root 标签中设置默认的日志级别,通常为 INFO
  • 特定包或类日志级别设置:通过 logger 标签为特定的包或类设置不同的日志级别,如为调试目的将某些包的级别设置为 DEBUG

2. 日志轮转与归档

  • 基于时间的轮转:使用 TimeBasedRollingPolicy 实现日志文件的按天或按小时轮转,避免单个日志文件过大。
  • 文件大小限制:结合 SizeAndTimeBasedFNATP 策略,限制日志文件的大小,当达到指定大小时进行轮转。

3. 异步日志记录

  • 使用AsyncAppender:对于高并发应用,可以考虑使用 AsyncAppender 来异步记录日志,减少对主业务线程的影响。

4. 配置文件管理

  • 使用logback-spring.xml而非logback.xml:在 Spring Boot项目中,推荐使用 logback-spring.xml 作为配置文件,因为它提供了对 Spring 环境的扩展支持,如 springProfile 标签用于多环境配置。
  • 配置文件位置:配置文件应放在 src/main/resources 目录下,这是 Spring Boot 查找资源文件的默认位置。

5. 使用占位符而不是字符串拼接

  • 当记录日志时,使用占位符而非字符串拼接来提高性能。例如:
logger.info("Received request to greet {}", name);

6. 避免不必要的日志输出

  • 只有在真正需要记录的时候才使用日志记录方法,比如在异常捕获中记录堆栈跟踪。

7. 使用 SLF4J API

  • Spring Boot 推荐使用 SLF4J(Simple Logging Facade for Java)作为日志记录的 API。这是因为 SLF4J 提供了一个简单的接口,可以在运行时绑定到任何具体的日志框架,比如 Logback

四、示例代码

1. 添加依赖

Spring Boot,那么默认情况下已经包含了 Logback 的依赖,无需再显示添加。

2. 创建日志记录器

在每个类中,我们都需要创建一个静态的 Logger 对象来记录日志。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController  
@RequestMapping("/users")  
public class UserController {  
	
	private static final Logger logger = LoggerFactory.getLogger(UserController.class);

	//根据用户姓名查询订单信息
   @GetMapping("order/{name}")
   public List<Object[]> getUserWithOrdersByName(@PathVariable String name){
   	logger.info("接收到用户姓名:{}", name);
   	return this.userService.getUserWithOrdersByName(name);
   }
}

3. 测试

使用 GET 方法访问 http://localhost:8080/users/order/111 ,得到如下日志信息:

INFO  c.j.demo.controller.UserController - 接收到用户姓名:111

遇见即是缘分,关注🌟、点赞👍、收藏📚,让这份美好延续下去!

🌟 从零开始学做管理 请关注 ⬇ 技术管理修行

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值