首页 > 其他分享 >Spring Boot 使用Apollo动态调整日志级别

Spring Boot 使用Apollo动态调整日志级别

时间:2024-07-28 17:30:02浏览次数:11  
标签:Spring 打印 Boot com SQL 日志 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,com,SQL,日志,Apollo,级别
From: https://www.cnblogs.com/east7/p/18328518

相关文章

  • Spring 状态机极简使用
    Spring状态机极简使用本文不探讨状态机的思想与Spring状态机的架构,仅做快速实现参考。Spring状态机官方文档项目参考代码基于SpringBoot配置的快速集成案例maven依赖配置<dependency><groupId>org.springframework.statemachine</groupId><artifactId>spring-s......
  • 实战: SpringBoot中5种增强的方法 : 加解密、脱敏、格式转换、时间时区处理(码到三十五)
    1.使用@JsonSerialize和@JsonDeserialize注解2.全局配置Jackson的ObjectMapper3.使用@ControllerAdvice配合@InitBinder4. 自定义HttpMessageConverter5.使用AOP进行切面编程结语在SpringBoot中,对接口的请求入参和出参进行自定义的增强或者修改,通常有以下......
  • 科普文:springcloud之-Ribbon
    一、SpringCloudRibbon 客户端负载均衡       Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。Bibbon 的架构图如下所示:        简单的说,SpringcloudRibbo......
  • macOS Sequoia 15 beta 4 (24A5298h) Boot ISO 原版可引导镜像下载
    macOSSequoia15beta4(24A5298h)BootISO原版可引导镜像下载iPhone镜像、Safari浏览器重大更新、备受瞩目的游戏和AppleIntelligence等众多全新功能令Mac使用体验再升级请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版。原创作品,转载请保......
  • SpringBoot 依赖之Validation
    ValidationValidation依赖名称:Validation功能描述:BeanValidationwithHibernatevalidator.使用Hibernate验证器进行Bean验证。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-valid......
  • 【第12章】Spring Cloud之集成 Spring Cloud Gateway
    文章目录前言一、新建项目1.项目结构2.引入依赖3.启动类4.基本配置二、新建配置三、新建服务1.提供者2.消费者四、单元测试1.启动网关服务2.提供者3.消费者总结前言SpringCloudGateway是一个基于SpringFramework5、SpringBoot2和ProjectReactor......
  • 简易版:在 SpringBoot 中设计一个订单号生成系统
     ​博客主页:   南来_北往系列专栏:SpringBoot实战引言要在SpringBoot中设计一个订单号生成系统,你可以按照以下步骤进行:创建一个SpringBoot项目,添加必要的依赖,如spring-boot-starter-web。创建一个订单号生成器类,实现订单号的生成逻辑。可以使用时间戳、随机数......
  • 微信小程序图书馆座位预约管理系统(SpringBoot后端+Vue管理端)附项目源码与配套文档
    目的和意义微信小程序图书馆座位预约管理系统可以对微信小程序图书馆座位预约管理系统信息进行集中管理,可以真正避免传统管理的缺陷。微信小程序图书馆座位预约管理系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和......
  • SpringBoot+Vue电影院售票系统 - 附源码与配套文档
    1.1 研究背景随着互联网技术的迅速发展和普及,人们的生活方式发生了深刻变革,对于文化娱乐消费的需求日益增长,而作为文化消费重要组成部分的电影行业也迎来了前所未有的发展机遇。然而,传统的电影院售票模式,如现场购票、电话预定等,已难以满足现代消费者对便捷性、灵活性和个性......
  • SpringMVC入门案例
    使用Servlet技术开发web程序流程1.创建web工程(Maven结构)2.设置tomcat服务器,加载web工程(tomcat插件)3.导入坐标(Servlet)4.定义处理请求的功能类(UserServlet)5.设置请求映射(配置映射关系)使用SpringMVc技术开发web程序流程1.创建web工程(Maven结构)2.设置tomcat......