文档章节

logback日志级别的动态修改

小舒舒_
 小舒舒_
发布于 2017/05/31 22:44
字数 685
阅读 962
收藏 0

动态调整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!现在大功告成了~

© 著作权归作者所有

共有 人打赏支持
小舒舒_
粉丝 1
博文 12
码字总数 13303
作品 0
浦东
高级程序员
加载中

评论(6)

小舒舒_
小舒舒_

引用来自“lexus-yan”的评论

想请教下博主,如何通过http请求在controller中修改远程web应用的logback日志级别,不知如何调用....其他远程的web应用日志系统都是用logback且知道他们的ip地址和端口,谢谢!
如果你们系统只有一个的话很好办,直接掉restful接口就可以了,如果是分布式的,个人觉得可以用ZK、消息中间件(如果系统使用了的话,当然大多分布式系统多半是有的),以事件触发的方式修过所有节点,有的分布式系统还不会有单独的日志模块,通过消息队列发送,可以写到磁盘也可以写到HDFS这就要根据具体情况而定了
lexus-yan
lexus-yan
想请教下博主,如何通过http请求在controller中修改远程web应用的logback日志级别,不知如何调用....其他远程的web应用日志系统都是用logback且知道他们的ip地址和端口,谢谢!
dong4j
dong4j

引用来自“shushangjin”的评论

引用来自“dong4j”的评论

首先感谢博主的这篇博客,已经解决动态修改日志级别的问题.
这里对这篇博客提出几点问题:

server.invoke中
楼主直接传入path, 这个path应该是日志配置文件的路径, 我想这样做应该是修改配置文件,然后重新加载,从而达到修改日志级别的作用. 但是为什么不直接使用setLoggerLevel方法? 这样做的话我们就不用在生产环境中修改一次日志配置,然后在调用这个接口了
我这个只是一个demo程序,包括里面一些打印都是没有必要的,我只是想看看是啥,这个demo的目的是有一个修改日志级别的方法,当然还有其他API可以修改比如修改特定log的级别,或者说有的接口压力比较大可能需要单独对其做特殊降级都是可以的,但是黑心的东西都和这个demo类似~只是我们大多数时候都是修改配置文件所以用的这个方式,总结就是触类旁通,更具具体需求可以做特殊的写发~

@shushangjin 博主说的是 已经通过JMX结合zookeeper动态修改集群中某个应用的日志级别
b
blc1314
写得很好:smile:
小舒舒_
小舒舒_

引用来自“dong4j”的评论

首先感谢博主的这篇博客,已经解决动态修改日志级别的问题.
这里对这篇博客提出几点问题:

server.invoke中
楼主直接传入path, 这个path应该是日志配置文件的路径, 我想这样做应该是修改配置文件,然后重新加载,从而达到修改日志级别的作用. 但是为什么不直接使用setLoggerLevel方法? 这样做的话我们就不用在生产环境中修改一次日志配置,然后在调用这个接口了
我这个只是一个demo程序,包括里面一些打印都是没有必要的,我只是想看看是啥,这个demo的目的是有一个修改日志级别的方法,当然还有其他API可以修改比如修改特定log的级别,或者说有的接口压力比较大可能需要单独对其做特殊降级都是可以的,但是黑心的东西都和这个demo类似~只是我们大多数时候都是修改配置文件所以用的这个方式,总结就是触类旁通,更具具体需求可以做特殊的写发~
dong4j
dong4j
首先感谢博主的这篇博客,已经解决动态修改日志级别的问题.
这里对这篇博客提出几点问题:

server.invoke中
楼主直接传入path, 这个path应该是日志配置文件的路径, 我想这样做应该是修改配置文件,然后重新加载,从而达到修改日志级别的作用. 但是为什么不直接使用setLoggerLevel方法? 这样做的话我们就不用在生产环境中修改一次日志配置,然后在调用这个接口了
Spring Boot学习笔记—日志

开发应用时,日志框架的依赖是不可避免的。应用依赖的其他框架中,可能又依赖了其他不同的框架,例如你的应用使用的Logback,但Spring系列框架使用的Log4j,还有某某框架依赖的Commons Loggi...

chace0120
2015/12/23
3.4K
0
Java日志系统研究

基本功能 1. 支持多个等级的日志打印:trace,debug,warning,error等等1. 支持按照不同的包名指定不同的等级1. 支持设置全局的默认日志等级1. 打印日志到单个或者多个文件,文件可以按指定...

landyking
2016/07/18
104
0
LogBack入门实践

一、简介 LogBack是一个日志框架,它是Log4j作者Ceki的又一个日志组件。 LogBack,Slf4j,Log4j之间的关系 slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它...

jiangmitiao
2016/03/26
1K
2
logback 配置详解(一)

一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有...

有资本再款
2015/12/06
65
0
Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)

说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档。 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块...

easonjim
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
10
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部