Spring Boot 使用Apollo动态调整日志级别
摘要:在Spring Boot 项目中,借助Apollo动态修改配置的能力,结合Logback修改日志级别打印执行的SQL脚本。
综述
在生产环境偶现测试环境未发现的SQL查询BUG,但由于线上关闭debug和trace级别日志导致缺少执行SQL、异常堆栈等日志信息,没有办法火速定位问题根源。面对这样的线上问题,通常的解决方案如下:
方案一:修改服务代码,将日志级别改成DEBUG并发版,排查完问题之后,将日志级别改回原日志级别,再上一次线,整个生命周期很长,而且需要修改代码。
方案二:在上线的时候设置日志级别为INFO,但是,不会打印执行的SQL语句,不满足诉求。
上述方案一不够优雅,而且发版是有严格流程的,不能随意发版。方案二满足不了需要打印SQL脚本的诉求。如果有一种方式,能够动态修改日志级别,在需要排查问题的时候改成DEBUG,不需要的时候就恢复INFO,岂不妙哉?有,请移步《Spring Boot + Apollo 动态修改日志级别》,本文讨论的核心是基于方案一的伪动态配置日志打印级别,但是,不需要改服务代码,只修改配置中心和重启服务。楼兰胡杨在《性能调优之日志打印的坑》中讨论了如何避免打印日志时常见的不优雅操作,感兴趣的猿友可以去了解一下。
解决方案
在 Spring Boot 中,日志的打印基于监听器机制实现。Spring Boot集成了配置中心Apollo和日志框架logback,所以,可以在Apollo设置输出到控制台的日志级别,然后重启服务即可生效,当然,如果是在线上环境配置的,请使用之后及时回滚配置。在Apollo中使用如下格式设置打印级别:
logging.level.file.path = logLevel
logging.level:用于设置日志级别,file.path为日志级别logLevel生效的作用域,可以是需要打印日志的包名,也可以是具体的类名。
logLevel:选项包括trace、debug、info、warn、error和fatal。debug级别日志用于记录一些关键操作的详细信息,通常在开发和测试阶段使用,本文用于线上环境调试应用程序,提供详细的执行信息,有助于发现问题。
在application.properties(.yml)或者Apollo中增加如下配置后,可以去控制台观察打印效果:
logging.level.com.huyang=error // com.huyang包下所有class以error级别输出日志
logging.level.com.huyang.querydao.WienerDao=debug //com.huyang.querydao包下的类WienerDao以debug级别输出执行的SQL语句
如果在application.properties中已经设置了,优先使用Apollo配置的日志级别。
关于logging.lever.root=info,其中 root 指把整个项目日志级别调整为error, 即可实现关闭绝大部分项目启动日志运行日志(近似关闭,亦可使用 off)。
logging.lever.com.xxx.querydao 其中com.xxx.querydao可为mapper文件对应的包,即可实现打印sql日志功能。
Spring Boot 使用Apollo动态调整日志级别的更多相关文章
- 动态调整日志级别思路&实现
引言 上篇文章 性能调优--小小的 log 大大的坑 已将详细的介绍了高并发下,不正确的使用日志姿势,可能会导致服务性能急剧下降问题.文末也给各位留下了解决方案--日志级别动态调整. 本文将详细介绍& ...
- Log4cpp配置文件及动态调整日志级别的方法
一.log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试: 可扩展的.多种方式记录日志,包括命令 ...
- Spring Boot 整合 Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot整合Restful架构 2.背景 Spring 与 Restful 整合才是微架构的核心,虽然在整 ...
- springboot动态修改日志级别+权限认证
1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个 ...
- [C#] 将NLog输出到RichTextBox,并在运行时动态修改日志级别过滤
作者: zyl910 一.缘由 NLog是一个很好用的日志类库.利用它,可以很方便的将日志输出到 调试器.文件 等目标,还支持输出到窗体界面中的RichTextBox等目标. 而且它还支持在运行时修改 ...
- Spring Boot (16) logback和access日志
Spring Boot 内部采用的是Commons Logging进行日志记录,但是在底层为Java Util Logging.Log4J2.Logback等日志框架提供了默认配置. logback ...
- Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean
在阅读Spring Boot源码时,看到Spring Boot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入.它是Spring中一个强大的扩展接口.本篇文 ...
- log4j2动态修改日志级别及拓展性使用
一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig ...
- Spring Boot动态修改日志级别
1. pom中引入 org.springframework.boot spring-boot-starter-actuator 2. 发送POST请求: 地址: http://[服务地址] ...
随机推荐
- 码云git笔记
以后要日常使用这个东西,所以今天又学习了下,具体链接如下: 码云帮助中心https://gitee.com/help/articles/4122 先记录一点简单的入门东西: Git 全局设置: git ...
- Easyexcel(2-文件读取)
同步读取 读取单个Sheet 通过sheet方法指定对应的Sheet名称或下标读取文件信息 通过doReadSync方法实现同步读取 @Data public class UserExcel { @E ...
- 最新版 Proteus 8.15 Professional 图文安装教程(附安装包)
前言 大家好,我是梁国庆. Proteus 是世界上唯一将电路仿真软件.PCB设计软件和虚拟模型仿真软件三合一的设计平台. 本篇博主将手把手带领大家安装最新版 Proteus 8.15. 若图片加载超 ...
- 如何写自己的springboot starter?自动装配原理是什么?
如何写自己的springboot starter?自动装配原理是什么? 官方文档地址:https://docs.spring.io/spring-boot/docs/2.6.13/reference/ ...
- 关于Primavera P6版本选择上的一些看法
从开始接触P6到目前也有近6年的时间,从最开始用的V7 (除P6.2.1)到现在用的18.8.0 ,除去一些小版本,中间自己跨越了8个不同版本 7.0, (2013) 8.2 ...
- C++文件读写常用操作
C++文件读写常用操作 最近的毕设工作要使用C++保存读取一些矩阵,此篇博文记录比较好用的C++文件读写操作. 写 #include <iostream> #include <fst ...
- Jmeter参数化总结
参数化步骤: 1.连接数据库 2.获取account表手机号数据 3.获取手机号个数 4.增加For Each控制器 5.将请求添加至循环控制器里面 脚本:循环登录.jmx 页面如下: 下面主要说明F ...
- Cursor:一个让程序员“失业”的AI代码搭子
Tab,Tab,再来一次 Tab 在当今AI工具横飞的时代,用一款好用的AI编码工具会让你的效率成倍增长. 上篇我们刚试过国内的Trae工具写了一个简单的demo,表现的中规中矩吧.Trae可以尝试写 ...
- 探秘Transformer系列之(26)--- KV Cache优化---分离or合并
探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并 目录 探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并 0x00 ...
- 网鼎杯-phpweb
找了一些php读取文件的函数尝试读取源码,试了一个readfile就成功了 <?php $disable_fun = array("exec","shell_exe ...