Logback使用和常用配置

Logback 是 Spring Boot 默认集成的日志框架,相比 Log4j,它性能更高、配置更灵活,并且天然支持 Spring Profile 多环境配置。以下是详细配置步骤及常用配置示例。


一、添加依赖(非 Spring Boot 项目)

若项目未使用 Spring Boot,需手动添加 Logback 依赖:

<!-- Maven 依赖 -->
<dependencies><!-- Logback 核心 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.14</version></dependency><!-- 支持 Spring Profile 配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><version>3.2.0</version></dependency>
</dependencies>

二、Logback 配置文件

配置文件名为 logback-spring.xmlSpring 推荐命名,logback-spring.xml,SpringBoot会自动加载),放置在 src/main/resources 目录下。

完整配置示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"><!-- 通用日志格式 --><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /><!-- 日志文件路径 --><property name="LOG_DIR" value="logs" /><property name="LOG_FILE" value="${LOG_DIR}/app.log" /><!-- 控制台输出(开发环境) --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 仅 dev 环境启用 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 --><springProfile name="dev"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></springProfile></appender><!-- 滚动文件输出(生产环境) --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 滚动策略:按时间 + 大小 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/app-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>10GB</totalSizeCap></rollingPolicy></appender><!-- 异步日志(提升性能) --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><queueSize>1024</queueSize><discardingThreshold>0</discardingThreshold><appender-ref ref="ROLLING_FILE" /></appender><!-- 日志记录器配置 --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="ASYNC" /></root><!-- MyBatis SQL 日志 --><logger name="com.example.mapper" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE" /></logger><!-- Spring 框架日志降级 --><logger name="org.springframework" level="WARN" />
</configuration>

注:日志文件如果不是logback-spring.xml的名字,springProfile配置会读取不到devprod等环境变量的值

三、核心配置详解

1. 全局配置
  • <configuration scan="true" scanPeriod="30 seconds">
    启用配置文件热更新,每隔 30 秒检查配置变化。
  • <property>
    定义变量(如 LOG_PATTERN),便于复用。

2. 输出器(Appenders)
a. 控制台输出(ConsoleAppender)
  • <encoder>:定义日志格式,%d 表示时间,%thread 为线程名,%-5level 左对齐日志级别。
  • <springProfile>:根据 Spring Profile 动态启用(如仅 dev 环境输出 DEBUG 级别)。
b. 滚动文件输出(RollingFileAppender)
  • <rollingPolicy>
    • SizeAndTimeBasedRollingPolicy:按时间和文件大小滚动。
    • fileNamePattern:归档文件名(%i 为滚动序号,.gz 自动压缩)。
    • maxFileSize:单个文件最大大小(触发滚动)。
    • maxHistory:保留最近 30 天日志。
    • totalSizeCap:日志总量上限(避免磁盘占满)。
c. 异步输出(AsyncAppender)
  • <queueSize>:异步队列大小(默认 256,增大可减少阻塞)。
  • <discardingThreshold>:队列剩余容量阈值(0 表示队列满时丢弃 INFO 以下日志)。

3. 日志记录器(Loggers)
  • <root>:根记录器,所有日志的默认配置。
  • <logger>
    • name:包或类名(如 com.example.mapper)。
    • level:日志级别(优先级高于 root)。
    • additivity="false":禁止向上传递日志事件(避免重复输出)。

四、Spring Profile 多环境配置

通过 springProfile 标签实现环境差异化配置:

<!-- 开发环境:输出 DEBUG 到控制台 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 -->
<springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE" /></root>
</springProfile><!-- 生产环境:仅输出 ERROR 到文件 name ="prod" prod是application.yaml文件中的spring.profiles.active的值-->
<springProfile name="prod"><root level="INFO"><appender-ref ref="ASYNC" /></root><logger name="com.example" level="WARN" />
</springProfile>

五、代码中使用日志

在类中通过 SLF4J API 记录日志:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);public void createUser(String username) {logger.debug("创建用户: {}", username);  // DEBUG 级别需配置对应 Loggerlogger.info("用户创建成功: {}", username);}
}

六、常见问题排查

  1. 日志未输出

    • 检查 logback-spring.xml 是否在 src/main/resources 目录。
    • 确认依赖无冲突(排除其他日志框架如 Log4j)。
    • 检查日志级别是否允许(如 DEBUG 需 Logger 和 Root 均开启)。
  2. 滚动文件未生成

    • 确认 LOG_DIR 路径存在且有写入权限。
    • 检查 fileNamePattern 是否符合预期(如日期格式)。
  3. 性能问题

    • 使用异步 Appender 并增加 queueSize
    • 避免高频输出 DEBUG 日志(生产环境关闭)。

七、总结

通过 Logback 可实现:

  1. 多环境差异化配置:利用 springProfile 标签。
  2. 高效日志管理:异步输出 + 滚动归档。
  3. 精细化日志控制:按包或类设置级别。

建议生产环境配置:

  • 使用 AsyncAppender 提升性能。
  • 限制 maxHistorytotalSizeCap 防止磁盘溢出。
  • 关闭非必要 DEBUG 日志。

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

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

相关文章

MySQL基础语法DDLDML

目录 #1.创建和删除数据库 ​#2.如果有lyt就删除,没有则创建一个新的lyt #3.切换到lyt数据库下 #4.创建数据表并设置列及其属性,name是关键词要用name包围 ​编辑 #5.删除数据表 #5.查看创建的student表 #6.向student表中添加数据,数据要与列名一一对应 #7.查询studen…

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章&#xff0c;为正式安装windowsUbuntu16.04双系统部分。在正式安装前&#xff0c;若还没有进行前期准备工作&#xff08;1.分区2.制作启动u盘&#xff09;&#xff0c;见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …

Ubuntu24.04 离线安装 MySQL8.0.41

一、环境准备 1.1 官方下载MySQL8.0.41 完整包 1.2 上传包 & 解压 上传包名称是&#xff1a;mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切换到上传目录 cd /home/MySQL8 # 解压&#xff1a; tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…

记录一次Dell服务器更换内存条报错解决过程No memory found

文章目录 问题问题分析解决流程总结 问题 今天给服务器添加了几个内存条&#xff0c;开启后报错 No memory found No useable DlMMs found. Verify the DlMMsare properly seated and that they are installed in the correct sockets. 问题分析 这个错误说明服务器在启动时没…

Apache HttpClient使用

一、Apache HttpClient 基础版 HttpClients 是 Apache HttpClient 库中的一个工具类&#xff0c;用于创建和管理 HTTP 客户端实例。Apache HttpClient 是一个强大的 Java HTTP 客户端库&#xff0c;用于发送 HTTP 请求并处理 HTTP 响应。HttpClients 提供了多种方法来创建和配…

Maven版本统一管理

多模块的项目&#xff0c;怎么方便管理 模块的版本号呢&#xff1f; 可以使用 ${revision} 配合 flatten-maven-plugin插件 <plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.1.0&…

时序数据库 InfluxDB(一)

时序数据库 InfluxDB&#xff08;一&#xff09; 数据库种类有很多&#xff0c;比如传统的关系型数据库 RDBMS&#xff08; 如 MySQL &#xff09;&#xff0c;NoSQL 数据库&#xff08; 如 MongoDB &#xff09;&#xff0c;Key-Value 类型&#xff08; 如 redis &#xff09…

E5071C数据保存教程:SNP文件/CSV导出+远程传输步骤一键收藏

Keysight E5071C 网络分析仪支持多种数据存储方式&#xff0c;以下是详细的操作步骤和注意事项&#xff1a; 1. 内部存储&#xff08;仪器内存&#xff09; 保存测量数据&#xff1a; 轨迹数据&#xff1a;按 Save/Recall → Save Trace Data → 选择存储格式&#xff08;如 …

业务相关

目录 一、Spark 1.spark主要用来计算什么&#xff1f; 随便说段代码 2.spark 运行命令说一个&#xff0c;平常用哪些参数&#xff0c;怎么考虑的 3.spark shuffle的代码有哪些&#xff0c;平日哪些操作涉及到shuffle了 4.计算中遇到最难解决的是什么&#xff1f; 5.Spark …

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[学成在线]07-视频转码

视频转码 视频上传成功后需要对视频进行转码处理。 首先我们要分清文件格式和编码格式&#xff1a; 文件格式&#xff1a;是指.mp4、.avi、.rmvb等这些不同扩展名的视频文件的文件格式 &#xff0c;视频文件的内容主要包括视频和音频&#xff0c;其文件格式是按照一定的编码…

Leetcode算法方法总结

1. 双指针法解决链表/数组题目 只要数组有序&#xff0c;就要想到双指针做法。还有二分法 回文串一般也会用到双指针&#xff0c;回文串的长度由于可能是奇数也可能是偶数&#xff0c;所以在寻找时&#xff0c;既需要寻找奇数长度的回文串&#xff0c;也需要寻找偶数长度的回文…

一周掌握Flutter开发--9. 与原生交互(上)

文章目录 9. 与原生交互核心场景9.1 调用平台功能&#xff1a;MethodChannel9.1.1 Flutter 端实现9.1.2 Android 端实现9.1.3 iOS 端实现9.1.4 使用场景 9.2 使用社区插件9.2.1 常用插件9.2.2 插件的优势 总结 9. 与原生交互 Flutter 提供了强大的跨平台开发能力&#xff0c;但…

基于Flask的通用登录注册模块,并代理跳转到目标网址

实现了用户密码的加密&#xff0c;代理跳转到目标网址&#xff0c;不会暴露目标路径&#xff0c;未登录的情况下访问proxy则自动跳转到登录页&#xff0c;使用时需要修改配置项config&#xff0c;登录注册页面背景快速修改&#xff0c;可以实现登录注册模块的快速复用。 1.app…

Java课程设计(双人对战游戏)持续更新......

少废话&#xff0c;当然借助了ai&#xff0c;就这么个实力&#xff0c;后续会逐渐完善...... 考虑添加以下功能&#xff1a; 选将&#xff0c;选图&#xff0c;技能&#xff0c;天赋&#xff0c;道具&#xff0c;防反&#xff0c;反重力&#xff0c;物理反弹&#xff0c;击落…

Ai工作流工具有那些如Dify、coze扣子等以及他们是否开源

Dify &#xff08;https://difycloud.com/&#xff09; 核心定位&#xff1a;专业级 LLM 应用开发平台&#xff0c;支持复杂 AI 工作流构建与企业级管理。典型场景&#xff1a;企业智能客服、数据分析系统、复杂自动化流程构建等。适合需要深度定制、企业级管理和复杂 AI 逻辑…

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖 Debezium Server Iceberg“Debezium Server Iceberg” 消费者设置数据复制Upsert 模式保留已删除的记录使用Upsert模式追加模式优化批处理大小在数据分析的世界中,数据湖是存储和管理大量数据以满足数据分析、报告或机…

docker run -p 5000:5000 my-flask-app

docker run -p 5000:5000 my-flask-app代码的意思是&#xff1a; 运行 my-flask-app 容器&#xff0c;并把 Flask 服务器的 5000 端口映射到本机的 5000 端口。 拆解解释 docker run -p 5000:5000 my-flask-app✅ docker run → 运行一个 Docker 容器 ✅ -p 5000:5000 → 端口…

高光谱工业相机+LED光源系统助力材料分类和异物检测、实现高速在线检测

检测光源包括可见光&#xff0c;如红光、蓝光和绿光以及其他波长的光&#xff0c;如紫外和红外波长&#xff0c;可以选择与检测对象物相应的波长。但由于能够照射的波长较窄&#xff0c;例如受到同色异物混入或多个素材的材质分类等&#xff0c;可能需要使用可照射多种波长的光…

Spring 拦截器(Interceptor)与过滤器(Filter)对比

Spring 拦截器&#xff08;Interceptor&#xff09;与过滤器&#xff08;Filter&#xff09;对比 核心对比表格 对比维度拦截器&#xff08;Interceptor&#xff09;过滤器&#xff08;Filter&#xff09;定义Spring MVC 提供的组件&#xff0c;集成于 Spring 处理器链。Servl…