动态调整logback日志级别
在生产环境中,我们经常需要通过调整日志输出级别来提升系统性能,找出程序BUG等。我们不太可能每次调整程序日志级别都要重启服务,这样代价太高特别是生产环境。
讲道理,如果是我们自己写程序类似这样的需求我们肯定会提供接口来动态调整,相信logback也一定有这样的接口,以下在官方文档中找到的方案:
https://logback.qos.ch/manual/jmxConfig.html
通过该文章我们能看到logback提供的方式是JMX接口;
你可以通过jcontrol来动态控制MBean 远程的或者本地的,同时也可以通过第三方中间件来控制,通常是提供web的方式进行控制。
即使第三方插件(比如mx4j)也是在java 标准库中提供的相关MBean API进行的操作,如果你需要管理的东西并不复杂完全可以直接写个接口来实现,避免了配置和不同环境带来的麻烦。
由于我们的项目是Spring boot的同时服务器的管理tomcat权限我们都没有,而且我们只是想实现动态修改日志级别,所以这里选择了自己写接口。讲道理现在自己实现要动态修改对象状态也不一定要用JMX,方案多的去了!
JMX:
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
以上是比较官方的解释,自己理解通俗的讲就是JVM提供了一个管理bean的办法,而这些被管理的bean叫做MBean,所以你要按照JVM提供的规则来写程序才能被jvm所管理,你才能程序或者人工的去维护这些bean。
以下是通过网络找的demo并做了修改,稍微读一读就能明白。
MBean的接口必须以MBean结尾
实现必须以Hello命名因为接口定义是HelloMBean
测试代码
很简单吧!
通过logback官方的文档以及对JMX的理解,现在我们来做动态修改日志级别代码就会很简单,你可以通过jconsole查看到logback的命名空间,这里我就直接贴出来
ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator
下面是修改接口的demo:
OK!现在大功告成了~