spring boot actuator 动态修改日志级别
创始人
2024-05-30 01:28:00
0

1 日志级别

Spring Boot Actuator包括在运行时查看和配置应用程序日志级别的功能。您可以查看整个列表,也可以查看单个记录器的配置,该配置由显式配置的日志级别和日志框架给出的有效日志级别组成。这些级别可以是:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF
  • null

null表示没有显式配置。

2 logger接口

2.1 列表

GET /loggers

样例:
GET http://localhost:8087/actuator/loggers
Authorization: Basic dGVzdDpCQUtGWCQzbA==

2.2 详情

GET /loggers/{name:.*}

样例:
GET http://localhost:8087/actuator/loggers/sample.actuator.SampleActuatorApplication
Authorization: Basic dGVzdDpCQUtGWCQzbA==

2.3 修改level

POST /loggers/{name:.*}

样例:
POST http://localhost:8087/actuator/loggers/sample.actuator.SampleActuatorApplication
Authorization: Basic dGVzdDpCQUtGWCQzbA==
Content-Type: application/json

{
“configuredLevel”: “DEBUG”
}

3 分析

接口位于spring boot actuator 的LoggersMvcEndpoint
LoggersMvcEndpoint->LoggersEndpoint->LoggingSystem

3.1 LoggingSystem

LoggingSystem是接口,通过实现类具体处理
在这里插入图片描述
LoggingSystem实现类是通过LoggingSystem.get(get(ClassLoader classLoader)获得的

    private static final Map SYSTEMS;static {// LinkedHashMap 保证顺序性,logback、log4j、javalogging的顺序,加载到对应的类,就返回对应的LoggingSystem的实现类Map systems = new LinkedHashMap();systems.put("ch.qos.logback.core.Appender", "org.springframework.boot.logging.logback.LogbackLoggingSystem");systems.put("org.apache.logging.log4j.core.impl.Log4jContextFactory","org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");systems.put("java.util.logging.LogManager", "org.springframework.boot.logging.java.JavaLoggingSystem");SYSTEMS = Collections.unmodifiableMap(systems);}public static LoggingSystem get(ClassLoader classLoader) {String loggingSystem = System.getProperty(SYSTEM_PROPERTY);if (StringUtils.hasLength(loggingSystem)) {if (NONE.equals(loggingSystem)) {return new NoOpLoggingSystem();}return get(classLoader, loggingSystem);}for (Map.Entry entry : SYSTEMS.entrySet()) {if (ClassUtils.isPresent(entry.getKey(), classLoader)) {return get(classLoader, entry.getValue());}}throw new IllegalStateException("No suitable logging system located");}private static LoggingSystem get(ClassLoader classLoader, String loggingSystemClass) {try {Class systemClass = ClassUtils.forName(loggingSystemClass, classLoader);return (LoggingSystem) systemClass.getConstructor(ClassLoader.class).newInstance(classLoader);}catch (Exception ex) {throw new IllegalStateException(ex);}}

LoggingSystem.get(get(ClassLoader classLoader)是通过LoggingApplicationListener调用的

3.2 LoggingApplicationListener

LoggingApplicationListener类图如下
在这里插入图片描述
在spring.factories发现LoggingApplicationListener配置,通过SpringFactoryLoader加载
在这里插入图片描述
初始化流程
在这里插入图片描述
注册到spring
在这里插入图片描述
调用流程
在这里插入图片描述

4 问题

4.1 安全

http接口可能会暴漏出去,存在安全问题。可以参照https://blog.csdn.net/weixin_43511928/article/details/129131251

  • 指定management.port,独立于业务端口
  • security.user.name、security.user.password配置账号密码(密码要使用强密码)

4.2 缺少reset

日志级别重置,恢复现场。

  • 可以在setLogLevel记录被修改的名字、旧的日志级别
  • 提供/logger/reset接口,setLogLevel恢复列表

4.3 只支持spring boot

4.3.1 参照对应日志框架LoggingSystem setLogLevel实现

LogbackLoggingSystem

	@Overridepublic void setLogLevel(String loggerName, LogLevel level) {ch.qos.logback.classic.Logger logger = getLogger(loggerName);if (logger != null) {logger.setLevel(LEVELS.convertSystemToNative(level));}}

Log4J2LoggingSystem

	@Overridepublic void setLogLevel(String loggerName, LogLevel logLevel) {Level level = LEVELS.convertSystemToNative(logLevel);LoggerConfig loggerConfig = getLoggerConfig(loggerName);if (loggerConfig == null) {loggerConfig = new LoggerConfig(loggerName, level, true);getLoggerContext().getConfiguration().addLogger(loggerName, loggerConfig);}else {loggerConfig.setLevel(level);}getLoggerContext().updateLoggers();}

4.3.2 使用arthas修改

参照 https://arthas.aliyun.com/doc/logger.html

相关内容

热门资讯

“邮票里的家与国”特展在成都新... 转自:四川在线四川在线记者 张红霞5月10日,由四川省纪委监委宣传部指导、成都市纪委监委宣传部主办的...
空军辟谣:网上“运-20向外方... 近日,网络上出现大量关于“运-20向巴基斯坦运送救援物资”的消息。对此,人民空军表示,此消息为不实信...
ST葫芦娃质押触发鹰眼“风险”... 截止2025年5月10日,ST葫芦娃(维权)整体质押股份为1.14亿股,整体质押占总股本之比为28....
金牌家居质押触发鹰眼“风险”评... 截止2025年5月10日,金牌家居整体质押股份为4636.73万股,整体质押占总股本之比为30.06...
青少年如何运动健身 持续上升 王威 青少年肥胖问题正逐渐成为大众关注的焦点。肥胖不仅会削弱青少年的体质,还可能为他们的健...
强化白酒知识产权保护   本报讯(记者李敏 通讯员文豪 邱林明)知识产权保护作为激励创新创造、维护市场秩序的核心机制,对构...
广州白云区一仓库发生火灾,一人... 广州消防通报,5月11日21时09分,广州市消防救援支队接到报警称白云区嘉禾街道西岭路184号A栋2...
羽坛“天王”激励西北娃追逐羽球...   新华社银川5月11日电 (记者 马思嘉 梅鹏鹏)11日,在宁夏银川市阅海小学羽毛球馆内,世界羽坛...
良品铺子核心股东质押股价疑似触... 截止2025年5月10日,良品铺子整体质押股份为8392.00万股,整体质押占总股本之比为20.93...
大家喝“老爸茶”更放心了   “老爸茶”是海南的传统饮食文化符号,是代表海南文化、海南旅游的一张闪亮名片。2024年,海南“老...
*ST赛隆质押触发鹰眼“风险”... 截止2025年5月10日,*ST赛隆(维权)整体质押股份为1900.00万股,整体质押占总股本之比为...
李书鹏:“年轻界别”中的环保老...    李书鹏在污染场地安全修复技术国家工程实验室里,比对不同种修复样本的效果。   李书鹏参加全国两...
塞力医疗质押触发鹰眼“风险”评... 截止2025年5月10日,塞力医疗(维权)整体质押股份为2495.00万股,整体质押占总股本之比为1...
立昂技术质押触发鹰眼“风险”评... 截止2025年5月10日,立昂技术整体质押股份为7720.32万股,整体质押占总股本之比为16.61...
智通港股通资金流向统计(T+2... 5月7日,中国银行(03988)、美团-W(03690)、建设银行(00939)南向资金净流入金额位...
我市林业科技示范项目落地   本报讯(洪观新闻记者 万磊)近日,市林业投资发展有限公司联合浙江农林大学申报的2025年度中央财...
健友股份核心股东质押股价疑似触... 截止2025年5月10日,健友股份整体质押股份为4284.15万股,整体质押占总股本之比为2.65%...
三人行质押触发鹰眼“风险”评级... 截止2025年5月10日,三人行整体质押股份为2560.00万股,整体质押占总股本之比为12.14%...
ST华西质押触发鹰眼“高风险”... 截止2025年5月10日,ST华西(维权)整体质押股份为1.07亿股,整体质押占总股本之比为9.06...
中坚科技质押触发鹰眼“风险”评... 截止2025年5月10日,中坚科技整体质押股份为3614.00万股,整体质押占总股本之比为27.38...