在 Spring Boot 中使用 Logback 作为日志框架是开发中的常见需求,因其高性能和灵活配置而广受青睐。以下是详细实践指南,结合了配置方法、代码示例及最佳实践:


🔧 一、依赖配置

Spring Boot 默认集成了 Logback,无需手动添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId> <!-- 默认包含 logging 模块 -->
</dependency>

若需切换至 Log4j2,需排除默认日志依赖并引入 Log4j2:

更多配置细节可参考:Spring Boot 日志系统配置(上)、Logback 配置文件详解。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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>

⚙️ 二、配置方式

1. 基础配置(application.yml/properties)

适用于简单场景,如设置日志级别和输出路径:

logging:level:root: INFOcom.example.service: DEBUG  # 包级自定义日志级别file:name: logs/app.log         # 指定日志文件路径pattern:console: "%d{yyyy-MM-dd} [%thread] %-5level %logger{36} - %msg%n"
  • 注意logging.file.namelogging.file.path 不可同时使用。
2. 高级配置(logback-spring.xml)

创建 src/main/resources/logback-spring.xml,支持复杂策略如滚动日志、环境隔离:

<configuration><!-- 动态读取 Spring 应用名 --><springProperty name="app.name" source="spring.application.name" default="app"/><property name="LOG_PATH" value="./logs/${app.name}"/><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern></encoder></appender><!-- 按天滚动日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留30天 --><maxFileSize>10MB</maxFileSize> <!-- 单文件最大10MB --></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 环境隔离配置 --><springProfile name="dev"><root level="DEBUG"> <!-- 开发环境启用DEBUG --><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root></springProfile><springProfile name="prod"><root level="INFO"> <!-- 生产环境仅INFO及以上 --><appender-ref ref="FILE"/></root></springProfile>
</configuration>
  • 关键特性
    动态属性<springProperty> 读取 Spring 配置
    环境隔离<springProfile> 按环境(dev/prod)切换配置
    滚动策略:避免日志文件过大(按时间/大小分割)

💻 三、代码中使用日志

通过 SLF4J 接口记录日志,避免直接依赖 Logback:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@RestController
public class UserController {private static final Logger logger = LoggerFactory.getLogger(UserController.class);@GetMapping("/users")public List<User> getUsers() {logger.debug("查询用户列表开始"); // DEBUG级别仅在开发环境输出logger.info("请求处理中...");try {// 业务逻辑} catch (Exception e) {logger.error("用户查询失败", e); // 记录异常堆栈}return userList;}
}
  • 最佳实践
    🔹 使用 {} 占位符避免字符串拼接开销:logger.info("用户ID: {}", userId);
    🔹 异常日志需传递异常对象:logger.error("错误描述", exception)

🚀 四、高级特性

  1. 异步日志
    提升性能,减少 I/O 阻塞:

    <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"><queueSize>500</queueSize> <!-- 队列容量 --><discardingThreshold>0</discardingThreshold> <!-- 不丢弃日志 --><appender-ref ref="FILE"/>
    </appender>
    
  2. MDC(诊断上下文)
    添加请求 ID 实现链路追踪:

    MDC.put("requestId", UUID.randomUUID().toString());
    logger.info("订单创建");
    MDC.remove("requestId");
    

    配置 logback-spring.xml 输出 MDC 值:

    <pattern>%d{yyyy-MM-dd} [%X{requestId}] %msg%n</pattern>
    
  3. 敏感信息脱敏
    自定义转换器屏蔽敏感数据(如手机号、密码)。


⚠️ 五、常见问题解决

问题原因与解决方案
日志文件未生成检查路径权限或配置冲突(logging.file.name vs logging.file.path
日志级别不生效确保配置文件中无冲突的 <logger> 定义,或检查依赖冲突(如多个日志框架共存)
配置变更未加载开启热更新:<configuration scan="true" scanPeriod="30 seconds">
生产环境日志过大启用滚动策略 + 异步写入,定期清理历史日志(maxHistory

💎 最佳实践总结

  1. 配置规范:优先用 logback-spring.xml(非 logback.xml)以支持 Spring 扩展;
  2. 环境适配:开发环境输出到控制台 + DEBUG 级别,生产环境仅文件输出 + INFO 级别;
  3. 性能优化:生产环境启用异步日志与滚动压缩策略;
  4. 日志治理:敏感信息脱敏、定期清理旧日志(maxHistory)、监控日志文件大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85857.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85857.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85857.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云 Lighthouse 轻量应用服务器:数据驱动的架构选型指南

摘要&#xff1a;腾讯云 Lighthouse 作为面向轻量级应用场景的优化解决方案&#xff0c;通过高性价比套餐式售卖、开箱即用应用模板及流量包计费模式&#xff0c;显著降低中小企业与开发者的上云门槛。本文基于性能测试与横向对比&#xff0c;量化分析其核心优势与适用边界。 …

Linux TCP/IP协议栈中的TCP输入处理:net/ipv4/tcp_input.c解析

在网络通信领域,TCP(传输控制协议)因其可靠的面向连接特性而被广泛应用。Linux内核的TCP/IP协议栈实现了对TCP协议的高效处理,其中net/ipv4/tcp_input.c文件扮演着关键角色,负责处理TCP数据包的输入逻辑。下面是对该文件核心功能的深入剖析。 一、TCP数据包接收与处理 (…

物联网传输网关、RTU、DTU及SCADA系统技术解析

目录 摘要 一、引言 二、物联网传输网关 1. 定义 2. 类型 3. 分类 4. 工作原理 5. 差异分析 总结&#xff1a; 三、RTU&#xff08;远程终端单元&#xff09; 1. 定义 2. 工作原理 3. 特点 4. 应用场景 四、DTU&#xff08;数据传输单元&#xff09; 1. 定义 …

【unity游戏开发——热更新】YooAsset简化资源加载、打包、更新等流程

注意&#xff1a;考虑到热更新的内容比较多&#xff0c;我将热更新的内容分开&#xff0c;并全部整合放在【unity游戏开发——热更新】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言1、什么是YooAsset&#xff1f;2、系统需求3、系统特点 一、下载安装…

AWS RDS/Aurora 开启 Database Insights 高级模式全攻略

想要深入了解数据库性能问题?AWS Database Insights 高级模式为您提供强大的性能分析工具。本文详细对比标准模式与高级模式的功能差异,并提供完整的启用指南和实战测试结果。 一、Database Insights 模式对比 AWS CloudWatch Database Insights 提供两种模式:标准模式和高…

XML SimpleXML

XML SimpleXML 引言 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;它被广泛应用于Web服务和数据交换。SimpleXML是PHP中一个处理XML数据非常便捷的库。本文将详细介绍SimpleXML库的基本用法&#xff0c;帮助读者快速掌握XML数据…

Docker简单介绍与使用以及下载对应镜像(项目前置)

DockerDocker安装Docker卸载Docker配置镜像源配置镜像加速 Docker服务命令1.镜像操作命令2.容器操作命令 安装Mysql**数据卷挂载** Docker 在linux中软件安装说起: 以前在linux中安装软件,是直接安装在linux操作系统中,软件和操作系统耦合度很高,不方便管理. 因为linux版本不…

MyBatis 简介

MyBatis 简介 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射&#xff0c;能够帮助开发者将 Java 对象与数据库表进行灵活映射&#xff0c;简化数据持久化操作。以下从多个维度详细介绍 MyBatis&#xff1a; 一、核心定位与优势 轻量级…

自监督学习在合成孔径声呐目标识别中的应用之论文阅读

自监督学习在合成孔径声呐目标识别中的应用 BW Sheffield 美国巴拿马城海军水面作战中心 1 引言 在自主水下航行器(AUVs)中应用计算机视觉面临着独特的挑战,因为海洋环境往往条件不可预测且极为严苛。传统计算机视觉研究主要依赖光学相机成像,而在光照不足、悬浮沉积物及水…

进程间通信2(命名管道)linux

1 命名管道 前面讲到匿名管道&#xff0c;有一个很大的限制&#xff0c;那就是只有具有相同祖先&#xff08;具有亲缘关系&#xff09;的进程间才能进行通信&#xff0c;但是如果想实现不同进程间的通信&#xff0c;这个时候命名管道就发挥着巨大作用。 命名管道是一种特殊类…

简单通过SenseVoice给自己配置一个语音转文字服务

首先把代码下载下来 gitgithub.com:FunAudioLLM/SenseVoice.git 然后写一个docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

网络钓鱼攻击

​根据2023年Proofpoint年度网络钓鱼报告显示&#xff1a;91%的针对性攻击始于钓鱼邮件&#xff0c;平均每30秒就有一个企业成为攻击目标&#xff0c;全球损失超过$6.5B​ 一、钓鱼攻击技术深度解析 1. 钓鱼攻击核心技术架构 2. 现代钓鱼技术演进 ​攻击向量升级路线​ ​当前…

uvicorn api:app --host 0.0.0.0 --port 7777容器运行失败

docker logs pycorrector-container-gpu 你这个报错的核心是&#xff1a; ERROR: Error loading ASGI app, Could not import module "api".这说明&#xff1a; uvicorn api:app 没有找到 api.py 文件&#xff0c;或者没法导入 app 对象。 &#x1f50d; 一步步排查…

热成像仪测MOSFET温度

热成像仪测MOSFET温度 根据提供的搜索结果&#xff0c;热测量方法主要分为非接触式和接触式两大类&#xff0c;针对不同材料特性和测量场景各有优势。以下是核心方法的总结及关键技术要点&#xff1a; &#x1f525; 一、非接触式热测量方法 红外热成像技术 原理&#xff1a;通…

Dagster资产元数据与标签:数据治理的利器

在现代数据栈中&#xff0c;有效的数据治理至关重要。Dagster作为领先的数据编排平台&#xff0c;提供了强大的资产元数据和标签功能&#xff0c;帮助团队更好地理解、组织和跟踪数据资产。本文将深入探讨Dagster中的资产元数据和标签功能&#xff0c;展示如何利用这些功能提升…

基于物联网的智能饮水机系统设计

标题:基于物联网的智能饮水机系统设计 内容:1.摘要 随着物联网技术的快速发展&#xff0c;智能设备在日常生活中的应用越来越广泛。本研究的目的是设计一种基于物联网的智能饮水机系统&#xff0c;以提高饮水机的使用便捷性和智能化程度。方法上&#xff0c;通过传感器实时监测…

DP读书:NEC年终小结和显示器【明基rd28u】

一点真实体验_写在ROBOCON2025国赛前 很久没有写这种关于感受的博客了&#xff0c;就用真实感受的角度来看看一次众测的经历&#xff0c;哈哈^ 差不多一个月前&#xff0c;我收到了明基的28寸显示器&#xff0c;体验了差不多2周左右&#xff0c;一直把显示器挂在实验室仓库La…

Solana 一键冷分仓机制详解:如何用技术手段构建健康的持仓结构

在 Solana 的快速发币环境中&#xff0c;许多项目方在成功部署代币后&#xff0c;会面临一个共通问题——如何避免持仓结构过于集中。无论是初始铸造的 Token、流动性预留份额&#xff0c;还是空投分发的准备金&#xff0c;如果长时间停留在单一钱包地址中&#xff0c;将在链上…

【智能体】dify部署本地步骤

从git克隆仓库到本地 git clone https://github.com/langgenius/dify.git设置环境变量 cd dify cd docker cp .env.example .envdocker启动 docker compose up -d在浏览器打开网址 http://localhost/install 登录后即可使用

开源鸿蒙6.0 Beta1版本发布!深圳触觉智能即将适配RK3566/RK3568/RK3576/RK3588等芯片

开放原子开源鸿蒙&#xff08;OpenAtom OpenHarmony&#xff0c;简称“开源鸿蒙”或“OpenHarmony”&#xff09;6.0 Beta1版本正式发布。相比5.1.0 Release版本进一步增强ArkUI组件能力&#xff0c;提供更安全、更灵活的组件布局&#xff1b;增强分布式数据管理能力&#xff0…