生产环境中经常有需要动态修改日志级别。
现在就介绍几种方案

方案一:开启logback的自动扫描更新

配置如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- configuration标签 scan属性代表logback框架会定时检测改配置文件是否有发生改动,如果有则更新为最新配置-->

然后就将修改的配置文件拷贝到app.jar的同级目录下config/logback.xml

方案二:自定义api

代码如下

/**
* log api
* @author lipeng
*/
@RequestMapping("/api/log")
@RestController
public class LogbackController { private Logger log = LoggerFactory.getLogger(LogbackController.class); /**
* logback动态修改包名的日志级别
* @param level 日志级别
* @param packageName 包名
* @return 当前的日志级别
* @throws Exception
*/
@RequestMapping(value = "/setlevel")
public String updateLogbackLevel( @RequestParam(value="level") String level,
@RequestParam(value="packageName",defaultValue = "-1") String packageName) throws Exception {
ch.qos.logback.classic.LoggerContext loggerContext =(ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger= null
if(packageName.equals("-1")) {
// 默认值-1,更改全局日志级别;否则按传递的包名或类名修改日志级别。
logger= loggerContext.getLogger("root")
} else {
logger= loggerContext.getLogger(packageName)
}
logger.setLevel(ch.qos.logback.classic.Level.toLevel(level));
return logger.getLevel();
} }

方案三:springboot引入Actuator

1、pom.xml增加相关依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

1、配置文件中增加配置
如果是springboot1.X,

management.security.enabled=false

如果是springboot2.X,则参考如下配置

management:
endpoint:
health:
show-details: "ALWAYS"
endpoints:
web:
exposure:
include: "*"

3、查看级别
我们可以发送GET 请求到 http://localhost:8080/actuator/loggers 来获取支持的日志等级,以及系统(ROOT)默认的日志等和各个包路径(com.xxx.aa等)对应的日志级别。

4、修改日志级别
通过 http://localhost:8080/actuator/loggers 端点提供的 POST 请求,修改包路径com.xxx.aa的日志级别为DEBUG:

发送POST 请求到 http://localhost:8080/actuator/loggers/com.xxx.aa,其中请求 Body 的内容如下:

{
"configuredLevel": "DEBUG"
}

再用GET 访问 http://localhost:8080/loggers/com.xxx.aa查看当前的日志级别:


{
configuredLevel: "DEBUG",
effectiveLevel: "INFO"
}

方案四 集成springcloudadmin来动态修改配置

springcloudadmin安装部署我就不做描述了,网上很多。
1、引入admin依赖

		<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、登录springcloudadmin,找到指定的服务中某一个节点

然后点击左边日期,进入控制台,如下

这样就能动态修改了,操作比较方便。

总结

在条件允许的情况下建议使用方案四

logback日志级别动态切换的四种方案 荐的更多相关文章

  1. logback日志级别动态切换的终极方案(asm使用)

    背景 一切皆有因果,所有事情,都有事件驱动.本方案的日志级别切换是由这样的背景下产生的: 单个生产环境上,有几百近千个微服务 日志级别切换不重启服务,要求即时生效果 由业务开发人员去修改代码或增加相关 ...

  2. springboot中动态修改logback日志级别

    springboot中动态修改logback日志级别 在spring boot中使用logback日志时,项目运行中,想要修改日志级别. 代码如下: import org.slf4j.Logger; ...

  3. 基于Vue SEO的四种方案

    基于Vue SEO的四种方案 https://segmentfault.com/a/1190000019623624?utm_source=tag-newest

  4. 【Logback日志级别】动态调整Logback的日志级别

    一.导入 Logback作为目前一个比较流行的日志框架,我们在实际项目经常使用到该框架来帮助我们打印日志,以便我们可以更快速地获取业务逻辑执行情况.定位系统问题. 常用的日志打印一共有5种级别控制,优 ...

  5. js动态引入的四种方式

    index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// ...

  6. 关于logback日志级别的配置

    logback如果需要灵活的配置日志级别,需要结合过滤器,<filter></fiter>这个标签.需要注意的是,过滤器过滤的基础是在root标签的配置基础上进行的. 过滤器可 ...

  7. 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中

    摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...

  8. OpenStack部署到Hadoop的四种方案

    随着企业開始同一时候利用云计算和大数据技术.如今应当考虑怎样将这些工具结合使用.在这样的情况下,企业将实现最佳的分析处理能力.同一时候利用私有云的高速弹性 (rapid elasticity) 和单一 ...

  9. Pytest测试框架一键动态切换环境思路及方案

    前言 在上一篇文章<Pytest fixture及conftest详解>中,我们介绍了fixture的一些关键特性.用法.作用域.参数等,本篇文章将结合fixture及conftest实现 ...

  10. Netty解决粘包和拆包问题的四种方案

    在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...

随机推荐

  1. python实现推送消息到微信公众号

    使用到库: Requests 实现方式: 微信已开放了对应的接口,直接通过python的requests库,发起请求,实现推送消息到公众号 微信公众号准备: 1.没有注册微信公众号,可以使用微信提供的 ...

  2. anaconda里虚拟环境安装jupyter notebook

    安装jupyter notebook 打开anaconda prompt,进入虚拟环境 conda activate Pytorch_learning 下载安装jupyter notebook con ...

  3. C# pythonnet(2)_傅里叶变换(FFT)

    Python代码如下 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取数据 data = pd.r ...

  4. 设备树DTS 学习:学习总结(应用篇)

    设备树DTS 学习:学习总结(应用篇) 背景 经过前几章的学习,我们可以说是掌握了设备树的基础用法,现在作为总结回顾. 1.设备树DTS 学习:有关概念 介绍了什么是设备树,设备树的作用,如何编译设备 ...

  5. 全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

    1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz.核心板CPU.ROM.RAM.电源.晶 ...

  6. 24 slide的pdf没有高亮开关

    安卓 app slide的pdf没有高亮开关

  7. 从零开始写 Docker(十九)---增加 cgroup v2 支持

    本文为从零开始写 Docker 系列第十九篇,添加对 cgroup v2 的支持. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 d ...

  8. java面试一日一题:讲下mysql中的锁

    问题:请讲下在mysql中的锁 分析:该问题主要考察对中锁的掌握,主要考察的是读.写锁.行锁.间隙锁.next-key,其他还有表锁.意向锁 回答要点: 主要从以下几点去考虑, 1.mysql中的锁有 ...

  9. 假期小结7爬虫学习requests

    这周我初步学习了py爬虫的相关知识,以下是我的部分总结 URL headers(URL头部)是HTTP请求中包含的一部分信息,用于描述.控制和传递请求的各种元数据.它们是位于HTTP请求消息的起始部分 ...

  10. 国内外GPT哪家强?对比#ChatGPT #bard #豆包 #bing #百度文心 #星火 #通义千问

    #ChatGPT(openAi) ChatGPT已经被错误调教,经常把作者和名字搞混. #豆包(字节跳动) 豆包拒绝错误调教 #百度文心(百度) #星火(科大讯飞) #通义千问 (阿里巴巴) #bar ...