Springboot 学习 之 logback-spring.xml 日志打印

文章目录

  • 1. property
  • 2. springProperty
  • 3. appender
  • 4. logger
    • 4.1. 通过包路径控制日志
    • 4.2. 通过类名控制日志
    • 4.3. 按自定义 Logger 名称控制日志
  • 5. root
  • 6. springProfile

SpringBoot 项目中可以通过自定义 logback-spring.xml 中各项配置,实现日志的打印控制

1. property

定义全局变量,简化重复值

<property name="LOG_HOME" value="logs" />

2. springProperty

application.properties环境变量 中读取值,定义全局变量

<!-- 应用名称 -->
<springProperty name="APPLICATION_NAME" source="spring.application.name"/>

3. appender

Appender 负责将日志输出到指定位置

  • ConsoleAppender:控制台输出
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder>
</appender>
  • RollingFileAppender:滚动文件输出
<!-- 滚动文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 归档策略:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个文件最大大小 --><maxFileSize>50MB</maxFileSize><!-- 日志最大的历史 --><maxHistory>60</maxHistory><!-- 启用异步压缩 --><asyncCompression>true</asyncCompression><!-- 设置最大临时文件大小 --><maxTempFileSize>0MB</maxTempFileSize></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><!-- 只允许 INFO 级别的日志通过 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:记录 --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:不记录 --><onMismatch>DENY</onMismatch></filter><!-- 错误处理器:当主 Appender 写入失败时,自动将日志事件转发到备用 Appender,自定义错误处理器:CustomErrorHandler extends ErrorHandlerBase1. 确保备用 Appender 不依赖可能失败的同类型资源2. 错误处理逻辑应轻量,避免在失败时加剧性能问题3. 备用 Appender 仅能捕获主 Appender 的错误,无法恢复已丢失的日志事件,需结合监控告警及时修复主 Appender。--><errorHandler class="com.example.CustomErrorHandler"><appender-ref ref="FAILOVER_APPENDER" /></errorHandler>
</appender>
  • AsyncAppender:异步文件输出
<!-- 异步打印日志:解决同步日志打印影响程序性能问题 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 绑定目标 Appender(如文件、控制台) --><appender-ref ref="FILE" /><!-- 队列容量(默认256)。队列满时,新日志事件将被阻塞或丢弃 --><queueSize>512</queueSize><!-- 队列剩余容量阈值,低于此值时丢弃低 TRACE/DEBUG/INFO 日志(默认队列剩余20%时丢弃),设为 0 表示永不丢弃 --><discardingThreshold>0</discardingThreshold> <!-- 是否包含调用者信息(如类名、方法名,默认false) --><includeCallerData>true</includeCallerData> <!-- 关闭 Appender 时的最大等待时间(毫秒,默认不限制)。超时后未处理的日志事件将被丢弃。--><maxFlushTime>5000</maxFlushTime>
</appender>
  • KafkaAppender:Kafka 消息输出
<!-- Kafka Appender -->
<appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender"><!-- Kafka 生产者配置 --><producerConfig>bootstrap.servers=${kafka.bootstrap.servers}acks=1                   <!-- 至少等待 Leader 确认 -->retries=3                <!-- 失败重试次数 -->max.block.ms=5000        <!-- 生产者阻塞超时时间 --></producerConfig><!-- topic --><topic>${kafka.topic}</topic><encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder"><layout class="ch.qos.logback.classic.layout.PatternLayout"><pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg</pattern></layout></encoder><!-- 异步发送策略 --><deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" /><!-- 错误处理:发送失败时记录到本地文件 --><appender-ref ref="ERROR_FILE" />
</appender>

4. logger

Logger 名称的层级规则,Logger 的名称通过‌点号(.)‌分割层级,例如:

  • com.example.myapp.TestApi 的父级 Logger 是 com.example.myapp
  • com.example.myapp 的父级 Logger 是 com.example
  • com.example 的父级 Logger 是 com
  • com 的父级 Logger 是 根 Logger(root)

Logback 的配置文件中,<logger> 元素用于 精细化控制 特定范围的日志输出

  • name:指定日志作用的范围 (包路径或 Logger 名称)
  • level:设置日志级别(TRACE/DEBUG/INFO/WARN/ERROR/OFF)
  • additivity:是否继承父 Logger 的 Appender (默认 true,设为 false 可避免重复输出)

4.1. 通过包路径控制日志

<!-- 1. 作用范围‌:org.springframework 包及其子包下的所有类
-->
<logger name="org.springframework" level="WARN" additivity="false"><appender-ref ref="SPRING_FILE"/>
</logger>

4.2. 通过类名控制日志

<!-- 1. 作用范围‌:com.example.myapp.TestApi 类
-->
<logger name="com.example.myapp.TestApi" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE"/>
</logger>

4.3. 按自定义 Logger 名称控制日志

<!-- 1. 作用范围‌:JOB_LOG 的日志(需结合 @Slf4j(topic = "JOB_LOG") 使用)
-->
<logger name="JOB_LOG" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE"/>
</logger>

5. root

Logger 配置,控制 全局日志级别

<root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="ASYNC_FILE"/>
</root>

6. springProfile

根据 Spring profile 不同,按环境激活配置

<springProfile name="dev"><!-- 仅当 Profile 包含 "dev" 时生效 --><logger name="com.example" level="DEBUG" />
</springProfile>

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

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

相关文章

Gradle与Idea整合

文章目录 1. Groovy 简介2. Groovy 安装[非必须]3. 在idea中创建java工程 1. Groovy 简介 在某种程度上&#xff0c;Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上&#xff0c;它可以很好地与Java代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言…

OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter

目录 前言 使用 引入依赖 开启feign 编写feign客户端 效果 日志 超时配置 重试机制 拦截器 Fallback兜底返回 引入依赖 编写兜底实现 连接池 引入依赖 开启连接池 制作OpenFeign Starter 编写配置类 自动装配 前言 在RPC框架中&#xff0c;有openFeign和Du…

Windows桌面图标变白的解决方案

一、问题原因 桌面图标变白通常是由于系统图标缓存文件&#xff08;IconCache.db&#xff09;损坏或系统图表示现异常导致。图标缓存是Windows用于存储应用程序和文件夹图标图像的临时文件&#xff0c;当该文件损坏或系统未正确更新缓存时&#xff0c;图标会因无法加载原始图像…

【mysql】Mac 通过 brew 安装 mysql 、启动以及密码设置

Mac 通过 brew 安装 mysql 、启动以及密码设置 使用 brew 安装 mysqlmysql 启动mysql密码设置参考文章&#xff1a; 使用 brew 安装 mysql brew install mysqlmysql 启动 下载完毕&#xff0c;终端告诉我们mysql数据库没有设置密码的&#xff0c;我们可以直接执行 mysql -u r…

Manus AI:突破多语言手写识别技术壁垒之路

Manus AI与多语言手写识别 讨论Manus AI如何突破多语言手写识别的技术壁垒。 写一篇详细的博客有重点有链接超详细 Manus AI&#xff1a;突破多语言手写识别技术壁垒之路 在人工智能领域&#xff0c;多语言手写识别一直是极具挑战性的难题。不同语言的字符形态、书写规则大相…

Redis字符串类型实战:解锁五大高频应用场景

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串&#xff08;String&#xff09;类型是最基础的数据结构&#xff0c;但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…

边沿耦合与宽边耦合的串扰

边沿耦合与宽边耦合的串扰 我们知道&#xff0c;如果两条走线位于同一层&#xff0c;由于耦合两条线之间会存在串扰。如果PCB层叠中有相邻的信号层&#xff0c;那么同样存在耦合&#xff0c;这两个相邻信号层的走线之间也会存在串扰。同层走线之间的耦合称为边沿耦合&#xff0…

B端可视化像企业数据的透视镜,看清关键信息

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据的价值不仅取决于其数量&#xff0c;更在于企业能否快速、准确地提取关键信息并据此做出决策。B端可视化技术的出现&#xff0c;为企业提供了一种强大的工具&#xff0c;它如同企业的“透视镜”&…

苍穹外卖项目中所涉及到的测试内容

1.使用JWT令牌封装用户令牌&#xff0c;并且设置相应的拦截器校验JWT的有效性&#xff0c;从而确保了项目的安全可靠 1.基本功能测试&#xff1a; 验证合法JWT是否能够正常通过拦截器的校验 验证非法的JWT能否正常通过拦截器的校验 2.可靠性测试&#xff1a; 3.易用性测试 …

模拟投资大师思维:AI对冲基金开源项目详解

这里写目录标题 引言项目概述核心功能详解多样化的AI投资智能体灵活的运行模式透明的决策过程 安装和使用教程环境要求安装步骤基本使用方法运行对冲基金模式运行回测模式 应用场景和实际价值教育和研究价值潜在的商业应用与现有解决方案的对比局限性与发展方向 结论 引言 随着…

YOLO拓展-锚框(anchor box)详解

一.锚框&#xff08;anchor box&#xff09;概述 1.1什么是锚框 锚框就是一种进行预测的像素框&#xff0c;通过遍历输入图像上所有可能的像素框&#xff0c;然后选出正确的目标框&#xff0c;并对位置和大小进行调整就可以完成目标检测任务。 对于yolo锚框的建设须基于实际…

Excel自定义函数取拼音首字母

1.启动Excel 2003&#xff08;其它版本请仿照操作&#xff09;&#xff0c;打开相应的工作表&#xff1b; 2.执行“工具 > 宏 > Visual Basic编辑器”命令&#xff08;或者直接按“AltF11”组合键&#xff09;&#xff0c;进入Visual Basic编辑状态&#xff1b; 3.执行“…

Cril 截取字段-生成hostname

有些event 是不规则,需要用regular express 来加工一下, 下面说一下sample 数据: 2021-10-26 17:00:12 PDT sample log data from host eagle1 2021-10-26 17:00:12 PDT sample log data from host eagle2 2021-10-26 17:00:12 PDT sample log data from host eagle3 2021…

关于大型语言模型的“生物学”

我知道我们已经聊过很多次&#xff0c;关于LLM是怎么运作的&#xff0c;它们的影响力&#xff0c;还有它们的使用场景。但尽管现在有那么多讲LLM的文章&#xff0c;它们本质上还是个黑箱。 但我们真正要问自己的问题是&#xff0c;为什么理解这些系统的内部结构很重要&#xf…

压滤机与锡泥产生效率

的关系可从设备作用机制、工艺参数影响及效率评估方法三个维度展开&#xff0c;结合工业实践与实验室研究&#xff0c;其关联逻辑如下&#xff1a; 一、压滤机在锡泥处理中的核心作用 固液分离原理 压滤机通过正压强压脱水、挤压脱水、风吹脱水三步实现固液分离&#xff1a; …

简单线段树的讲解(一点点的心得体会)

目录 一、初识线段树 图例&#xff1a; ​编辑 数组存储&#xff1a; 指针存储&#xff1a; 理由&#xff1a; build函数建树 二、线段树的区间修改维护 区间修改维护&#xff1a; 区间修改的操作&#xff1a; 递归更新过程&#xff1a; 区间修改update&#xff1a…

Jenkins 2.492.2 LTS 重置管理员密码

文章目录 1. Jenkins 关闭用户认证2. jenkins 修改密码 如果忘记了 Jenkins 的管理员密码的话&#xff0c;也不用担心&#xff0c;只要你有权限访问 Jenkins 的根目录&#xff0c;就可以轻松地重置密码。 1. Jenkins 关闭用户认证 // 查看 jenkins 家目录&#xff08;使用 doc…

《AI大模型应知应会100篇》第26篇:Chain-of-Thought:引导大模型进行步骤推理

第26篇&#xff1a;Chain-of-Thought&#xff1a;引导大模型进行步骤推理 摘要 在自然语言处理&#xff08;NLP&#xff09;和人工智能领域&#xff0c;如何让大模型像人类一样进行逐步推理是一个核心挑战。Chain-of-Thought (思维链) 技术的出现为这一问题提供了强有力的解决…

SICAR 标准 安全门锁操作箱 按钮和指示灯说明

1、安全门锁操作箱 2、按钮和指示灯说明 一、指示灯说明 红灯&#xff1a; 常亮&#xff1a;表示安全门已解锁&#xff1b;闪烁&#xff1a;表示安全门未复位&#xff1b;熄灭&#xff1a;表示安全门已复位。 黄灯&#xff1a; 常亮&#xff1a;表示处于维修模式。 绿灯&…

MAC-​​需求​​:10万订单异步执行库存扣减、短信通知。

批量任务并行处理​​ 实现,通过拆分任务、异步执行和线程池管理提升处理。 ​​10万订单异步处理方案设计​​ 基于图中代码的批量处理框架,结合订单业务需求,以下是 ​​库存扣减与短信通知的异步实现​​: ​​1. 代码实现(基于原有框架改造)​​ @Service public…