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

作者:kl 时间:2022-09-19 01:57:45 

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

前言

日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用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

来源:http://www.kailing.pub/article/index/arcid/189.html

标签:springboot,日志级别,动态调整
0
投稿

猜你喜欢

  • C# 9.0 新特性之模式匹配简化的实现

    2023-11-06 19:42:15
  • Android编程实现将应用强制安装到手机内存的方法

    2022-09-09 23:02:08
  • Java 判断线程池所有任务是否执行完毕的操作

    2021-10-03 09:43:55
  • JAVA 内存溢出案例汇总

    2022-02-16 08:49:22
  • ThreadPoolExecutor中的submit()方法详细讲解

    2022-02-18 03:02:39
  • C#从windows剪贴板获取并显示文本内容的方法

    2022-06-03 01:56:47
  • 一文给你通俗易懂的讲解Java异常

    2021-12-20 14:40:56
  • C#使用dynamic类型访问JObject对象

    2022-03-01 13:05:28
  • SpringBoot实现启动项目后立即执行的方法总结

    2022-07-31 15:01:16
  • Java开发者就业需要掌握的9大专业技能

    2021-11-13 12:01:54
  • SpringBoot集成elasticsearch使用图文详解

    2021-06-06 16:12:47
  • Java基础详解之集合框架工具Collections

    2021-11-09 02:40:32
  • 解决Java导入excel大量数据出现内存溢出的问题

    2023-05-30 08:41:20
  • java实现砸金蛋抽奖功能

    2022-02-22 01:26:50
  • Android组件ViewStub基本使用方法详解

    2022-01-15 07:30:54
  • Android自定义viewGroup实现点击动画效果

    2022-09-01 00:27:07
  • springboot 项目启动后无日志输出直接结束的解决

    2023-05-25 02:28:21
  • C#应用ToolStrip控件使用方法

    2023-05-23 09:10:18
  • Android自定义UI手势密码终结版

    2021-07-29 15:40:17
  • Feign远程调用Multipartfile参数处理

    2022-09-22 02:46:24
  • asp之家 软件编程 m.aspxhome.com