文档章节

logback日志级别的动态修改

小舒舒_
 小舒舒_
发布于 2017/05/31 22:44
字数 685
阅读 1081
收藏 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
博文 13
码字总数 15534
作品 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
写得很好😄
小舒舒_
小舒舒_

引用来自“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
从Log4j迁移到LogBack的理由

无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进。不过尽管难以一一细数,这里还是列举部分理由为什么选择logback而不是log4j。牢记logback与log4j在概念上面是很相似的,它们...

Sub
2013/03/24
60.3K
48
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
Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)

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

easonjim
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用docker-compose部署软件配置

本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置。下面话不多说了,来一起看看详细的介绍吧 安装docker及docker-compose install docker curl ...

开元中国2015
16分钟前
3
0
GraphQL 基金会成立了:将托管于Linux 基金会管理

GraphQL 基金会在11月7日宣布成立,并将由 Linux 基金会管理。GraphQL 基金会将专用于完善和稳定 GraphQL 生态系统,让 GraphQL 得到广泛关注和采用。GraphQL 是 Facebook 开发的一个应用层数...

Linux就该这么学
26分钟前
6
0
Java开发中内存模型详细解析

Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着。网上已经有大量的博客,但是人家...

金铭鼎IT教育
30分钟前
3
0
render常用模版 结合iview

表格添加一对按钮 { title: '操作', align: 'center', render: (h, params) => { return h('div', [ h('Button', { props: { ......

Carbenson
46分钟前
1
0
一次生产 CPU 100% 排查优化实践

前言 到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题。 还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不...

crossoverJie
53分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部