当前位置: 首页 > news >正文

Spring Boot 3.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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 白酒与家庭:团圆时刻的需备佳品
  • 网络攻击常见技术方法(14种)
  • Kotlin学习-01创建kotlin学习环境
  • 程序员如何平衡日常编码工作与提升式学习?
  • RabbitMq实现延迟队列功能
  • 【CSS】使用 CSS 自定义属性(变量)-- var()
  • 基于python的汽车数据分析与可视化---附源码99290
  • 微信小程序详细登录流程
  • Jenkins 2.346.1完整搭建及项目部署安装
  • C语言家教记录(七)
  • 人工智能与机器学习在医学领域的应用
  • 结构型模式之外观模式
  • vue3状态管理库Pinia应用
  • C++入门基础知识28——关于【C++ 常量】
  • 论文阅读:MonoScene: Monocular 3D Semantic Scene Completion
  • (三)从jvm层面了解线程的启动和停止
  • bootstrap创建登录注册页面
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • gitlab-ci配置详解(一)
  • Linux中的硬链接与软链接
  • React系列之 Redux 架构模式
  • SSH 免密登录
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给Prometheus造假数据的方法
  • 前端性能优化——回流与重绘
  • 双管齐下,VMware的容器新战略
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 译有关态射的一切
  • 阿里云服务器购买完整流程
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ## 基础知识
  • #include<初见C语言之指针(5)>
  • #pragma once与条件编译
  • %@ page import=%的用法
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4)logging(日志模块)
  • (9)目标检测_SSD的原理
  • (NSDate) 时间 (time )比较
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot教学评价 毕业设计 641310
  • (计算机网络)物理层
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十八)SpringBoot之发送QQ邮件
  • (十三)Flink SQL
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译) 函数式 JS #1:简介
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • . Flume面试题
  • .net 7 上传文件踩坑
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践