Springboot 动态改变Log级别( 二 )


MQ就是其中一个选择 。我简单说一下实现思路吧,具体实现也很简单,就留给大家去动手实践啦 。

  1. 暴露一个修改日志级别的接口
  2. 这个接口要做的是使用producer来发送一个广播类型的MQ,注意了,是广播类型的
  3. 在consumer里面通过LoggingSystem进行日志级别的修改即可 。
是不是很简单呢?
使用Springboot的 actuator 组件其实这种方法和方式一是差不多的,只是actuator把接口通过端点Endpoints 的方式暴露出来 。
至于什么是端点(Endpoints),我简单介绍一下吧 。
  • 什么是端点
Endpoints 是 Actuator 的核心部分,它用来监视应用程序及交互,spring-boot-actuator中已经内置了非常多的Endpoints(health、info、beans、httptrace、shutdown等等),同时也允许我们扩展自己的端点 。
  • 端点的分类
Endpoints 分成两类:原生端点和用户自定义端点;自定义端点主要是指扩展性,用户可以根据自己的实际应用,定义一些比较关心的指标,在运行期进行监控 。
原生端点是在应用程序里提供的众多 restful api 接口,通过它们可以监控应用程序运行时的内部状况 。
原生端点又可以分成三类:
  1. 应用配置类:可以查看应用在运行期间的静态信息:例如自动配置信息、加载的spring bean信息、yml文件配置信息、环境信息、请求映射信息;
  2. 度量指标类:主要是运行期间的动态信息,例如堆栈、请求链、一些健康指标、metrics信息等
  3. 操作控制类:主要是指shutdown,用户可以发送一个请求将应用的监控功能关闭 。
我们这里修改配置文件用到的就是应用配置类的端点 。
查看当前应用各包/类的日志级别http://localhost:8080/actuator/loggers
可看到类似如下的结果:
{ "levels": ["OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"], "loggers": {"ROOT": {"configuredLevel": "INFO","effectiveLevel": "INFO"},"com.itmuch.logging.TestController": {"configuredLevel": null,"effectiveLevel": "INFO"} } // ...省略}查看指定包/类日志详情http://localhost:8080/actuator/loggers/com.dylan.logging.TestController
可看到类似如下的结果:
{"configuredLevel":null,"effectiveLevel":"INFO"}修改日志级别POST方式,json格式的参数
example:http://localhost:8080/actuator/loggers/com.dylan.controller.IncreaseAgentController
Springboot 动态改变Log级别

文章插图
actuator修改日志级别
但这种方式和方式一有同样的局限性,就是只适合单机或者开发环境 。如果想用这种方式的话可以接入Spring Boot Admin 。通过后台的方式进行管理 。




推荐阅读