spring boot线上日志级别动态调整的配置步骤

目录
  • 前言
  • 正文
    • springboot版本:1.5.7
  • 配置
  • 文末结语

前言

日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO级别的日志,主要记录业务操作的日志。那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,之前确实是这么做的。下面会介绍使用动态调整线上日志级别来解决这个问题。

正文

spring boot版本:1.5.7

实现起来超级简单,使用spring boot自带的LoggingSystem的api来动态设置日志级别,当然的项目需要提供动态调整的接口,来达动态调整的目的。不过博主项目使用了Apollo配置中心,利用其配置动态生效的特性,soso就搞定了,代码如下

@Service
public class DynamicLoggersConfig{
	Logger logger= LoggerFactory.getLogger(getClass());
	@ApolloConfig
	private Config config;
	private final static String LoggerTag="logging.level.";
	private final LoggingSystem loggingSystem;
	public DynamicLoggersConfig(LoggingSystem loggingSystem) {
		Assert.notNull(loggingSystem, "LoggingSystem must not be null");
		this.loggingSystem = loggingSystem;
	}
	@ApolloConfigChangeListener
	private void configChangeListter(ConfigChangeEvent changeEvent){
		SetkeyNames=config.getPropertyNames();
		for (String key:keyNames){
			if (StringUtils.containsIgnoreCase(key,LoggerTag)){
				String strLevel=config.getProperty(key,"info");
				LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
				loggingSystem.setLogLevel(key.replace(LoggerTag,""),level);
				logger.info("{}:{}",key,strLevel);
			}
		}
	}
}

配置

和在spring环境下正常配置日志级别一样配置即可,如

logging.level.org.springframework = info
logging.level.com.yudianbank.sales = debug
logging.level.org.hibernate = info

如上代表spring体系工具开启INFO级别日志,业务系统开启DEBUG级别日志,hibernate开启INFO级别日志

文末结语

动态日志输出看似小功能,却能解决非常大的问题。各种环境bug排除都少不了看日志输出。文件提到的Apollo是携程开源的配置中心项目,顺道推广下,感谢携程开源给了我们这么好的产品。项目地址如下

Apollo项目地址:https://github.com/ctripcorp/apollo

以上就是spring boot线上日志级别动态调整的配置步骤的详细内容,更多关于spring boot线上日志级别动态调整的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot实用小技巧之如何动态设置日志级别

    前言 有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下.此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办? Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制.在实际使用中需要结合Spring-Security提供的安全机制来保护Actuator 提供的各种系统级端点的安全访问. SpringBoot从版本 1.5

  • 动态配置Spring Boot日志级别的全步骤

    前言 项目使用了SpringBoot构建项目.下面对动态调整日志的级别进行记录. 从版本 1.5.1 之后就提供了基于 spring-boot-starter-actuator 的端点 /loggers.通过该端点可以实现查看系统的 package-path 的日志级别,以及针对特定的 package-path 配置运行中的应用的日志级别的功能. Actuator 依赖 pom 依赖 因为是基于 Web 的项目和利用 Actuator 提供的端点来进行配置,因此需要依赖: <dependency

  • springboot动态调整日志级别的操作大全

    1.springboot使用log4j2 springboot使用的common-logging,底层兼容各种日志框架如,log4j2,slf4,logback等,默认底层使用的是logback,我们可以去除logback的依赖,引入log4j2的starter, 如下: 2.指定日志配置文件和日志等级 (此配置不限于log4j2,也适用于其他日志框架) 在resources目录下加入log4j2的xml配置文件,默认spring-boot会加载classpath下面的名为log4j2.xml,

  • SpringBoot动态修改日志级别的操作

    前言 为了减少日志频繁打印带来的性能影响,线上环境设置的日志级别一般都相对较高.而当出现生产问题需要排查的时候,可能需要适当降低日志级别(例如DEBUG)来打印更多的日志信息帮助定位问题. 传统的做法一般是: 1.配置里修改日志级别 2.重启应用 3.问题复现查看报错日志排查问题 这个过程需要重启应用,比较麻烦,效率较低,而且针对大型在线项目,不可能随便停机重启.那么有没有一种方式在不重启应用的情况下实现动态修改日志级别呢? 下面,让老万教你如何通过SpringBoot的actuator组件来实

  • spring boot线上日志级别动态调整的配置步骤

    目录 前言 正文 springboot版本:1.5.7 配置 文末结语 前言 日志模块是每个项目中必须的,用来记录程序运行中的相关信息.一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO级别的日志,主要记录业务操作的日志.那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,之前确实是这么做的.下面会介绍使用动态调整线上日志级别来解决这个问题. 正文 spring boot版本:1.5

  • spring boot使用logback日志级别打印控制操作

    因为公司业务需要,需要把性能日志和业务日志分开打印,用elk收集处理,所以需要对不同的业务的日志,打印到不同文件. 使用的是spring boot自带的logback. 首先在yml文件配置logback.xml文件,默认会从resources下找logback.xml文件,找不到会从yml文件中找logging.config下的指定文件. logging: level: DEBUG config: classpath:logback.xml logback.xml是logback的配置文件,可

  • spring batch线上异常定位记录

    目录 前言 环境说明 排查过程 1.xxljob长连接导致 2.定位JpaPagingItemReader的问题 3.确定JpaPagingItemReader的问题 解决问题 前言 最近线上spring batch的一个问题围绕博主近两周时间,甚是扰神.具体现象为,spring batch执行中莫名其妙线程就卡住了,不往下走了.下面会详细描述整个问题的排查过程 环境说明 spring batch分区环境,共6个分片,两台实例,分别6个线程处理,由xxljob任务调度触发日切job,配置由apo

  • Java ASM使用logback日志级别动态切换方案展示

    目录 背景 logback简介 解决方案 方案一:logback自动扫描更新 方案二:ASM动态修改字节码 延伸扩展 背景 一切皆有因果,所有事情,都有事件驱动.本方案的日志级别切换是由这样的背景下产生的: 单个生产环境上,有几百近千个微服务 日志级别切换不重启服务,要求即时生效果 由业务开发人员去修改代码或增加相关依赖配置等涉及面广,推动进度慢 后期动态实时过滤垃圾日志,减少io和磁盘空间成本 logback简介 在跟敌人发起战争之前,只有先发解敌方的情况,才能做到百战百胜.要想对logbac

  • ELK搭建线上日志收集系统

    目录 ELK环境安装 docker-compose脚本 安装要点 分场景收集日志 Logback配置详解 完全配置 配置要点解析 使用默认的日志配置 springProperty filter appender logger 控制框架输出日志 Logstash配置详解 完全配置 配置要点 SpringBoot配置 Kibana进阶使用 ELK环境安装 ELK是指Elasticsearch.Kibana.Logstash这三种服务搭建的日志收集系统,具体搭建方式可以参考<SpringBoot应用整

  • Spring boot定时任务的原理及动态创建详解

    v一.前言 定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务.这篇文章主要给大家介绍了关于Spring boot定时任务的原理及动态创建的相关内容,下面来一起看看详细的介绍吧 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做成可配置是有一定难度的.数据规则这块必须强烈要求统一,服务器.文件名规则都可以从配置中心去读.每新增一个省份的配置,后

  • Spring Boot 打包上传Docker 仓库的详细步骤

    重要提示:学习本文之前需要提前了解docker容器相关的知识,了解和熟练运用常用的docker操作命令,如果已经了解了docker容器相关的知识那我们就开搞吧! 以下是完成标题所述功能的大致步骤: 搭建docker镜像仓库 修改Spring Boot 配置文件添加docker仓库配置,打包,上传至docker 镜像仓库 从自己搭的docker镜像仓库拉取上传的镜像文件并运行 Step1 搭建docker镜像私有仓库 搭建docker镜像仓库我们需要依赖docker-registry工具 ,doc

  • spring boot自定义log4j2日志文件的实例讲解

    背景:因为从 spring boot 1.4开始的版本就要用log4j2 了,支持的格式有json和xml两种格式,此次实践主要使用的是xml的格式定义日志说明. spring boot 1.5.8.RELEASE 引入log4j2的开发步骤如下: 1.首先把spring-boot-starter-web以及spring-boot-starter包下面的spring-boot-starter-logging排除,然后引入spring-boot-starter-log4j2包. <dependen

  • Spring Boot如何实现定时任务的动态增删启停详解

    我以为动态停启定时任务一般用quartz,没想到还可以通过ScheduledTaskRegistrar来拓展.但是分布式场景,建议还是用quartz吧! 在 spring boot 项目中,可以通过 @EnableScheduling 注解和 @Scheduled 注解实现定时任务,也可以通过 SchedulingConfigurer 接口来实现定时任务.但是这两种方式不能动态添加.删除.启动.停止任务.要实现动态增删启停定时任务功能,比较广泛的做法是集成 Quartz 框架. 但是本人的开发原

  • Spring Boot应用上传文件时报错的原因及解决方案

    问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location is not valid". 原因追踪 这个问题的根本原因是Tomcat的文件上传机制引起的! Tomcat在处理文件上传时,会将客户端上传的文件写入临时目录,这个临时目录默认在/tmp路径下,如:"/tmp/tomcat.6574404581312272268.18333/work/T

随机推荐