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

相关内容

热门资讯

成都市防汛抗旱指挥部终止防汛四... 四川在线记者 张红霞7月5日上午,成都市防汛抗旱指挥部对外发布:根据当前的雨情和水情趋势,决定于7月...
黄茅海跨海通道荣获国际桥梁大会... 转自:中工网工人日报-中工网记者 赵昂 通讯员 赵桂军 李晓晖近日,中铁十二局参与申报的“黄茅海跨海...
昆明市五华区工会、人社、法院紧... 来源:中工网-工人日报 中工网讯(工人日报-中工网记者赵黎浩)近日,云南省昆明市五华区总工会、区人社...
又一私募内幕交易曝光,连带董事... 财联社7月5日讯(记者 封其娟)私募行业再曝内幕交易罚单,3倍罚款叠加下,合计罚没超3800万元。湖...
乡镇小本创业致富项目(小项目创... 你对自己的现状满意吗?工资少,吃冷馒头,穿三双十块钱的袜子,红灯亮的时候你为自己的摩比克终于超过别人...
科技孵化园是做什么的(创业孵化... 开栏语科技兴,民族兴,科技强,国家强。5月6日,重庆召开科技创新研究成果交流会。党委书记陈敏儿主持会...
天路职工随雨而动筑牢高原铁路安... 转自:中工网工人日报-中工网记者 邢生祥 通讯员 赵风斌 马正俊7月4日凌晨,一场强降雨突袭青海大部...
低加盟费小创业项目(零创业加盟... 如果年满18周岁,没有犯罪记录,可以0元的初费成为鹿茶的“合伙人”?文 | 张行英编辑 | 杜布奇已...
市场 | 越南低价不锈钢冷轧持... (转自:要钢网)烨联4日发声明表示,越南持续倾销不锈钢冷轧至台湾市场,严重扰乱岛内钢市并造成产业实质...
创新创业项目点子,大学生创业中... 创新创业就是让我们打破一些常规的思维模式,然后改变我们的日子。那么,大学生有什么好的创新创业项目吗,...