Java ASM使用logback日志级别动态切换的方法


这篇文章主要讲解了“JavaASM使用logback日志级别动态切换的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaASM使用logback日志级别动态切换的方法”吧!一切皆有因果,所有事情,都有事件驱动。本方案的日志级别切换是由这样的背景下产生的:单个生产环境上,有几百近千个微服务日志级别切换不重启服务,要求即时生效果由业务开发人员去修改代码或增加相关依赖配置等涉及面广,推动进度慢后期动态实时过滤垃圾日志,减少io和磁盘空间成本在跟敌人发起战争之前,只有先发解敌方的情况,才能做到百战百胜。要想对logback的日志级别做动态切换,首先至少对logback做个初步的了解、和看看它有没有提供现成的实现方案。下面简单介绍一下logback跟这次需求有关的内容。logback是java的日志开源组件,是log4j创始人写的,目前主要分为3个模块logback-core:核心代码模块logback-classic:log4j的一个改良版本,同时实现了slf4j的接口logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能ContextInitializer类是logback自动配置流程的逻辑实现日志级别由Logger维护和使用。其成员变量Level正是由Logger维护Logger中有filterAndLog_0_Or3Plus、filterAndLog_1、filterAndLog_2三个不同参数的过滤日志输出方法Logger中的setLevel就是对日志级别的维护在满头苦干之前,先了解市面上的方案。是设计师们乃至产品大佬们寻求最优解决方案的思路。这个方案是logback自带现成的实现,只要开启配置就可以实现所谓的日志级别动态切换。配置方法:在logback的配置文件中,增加定时扫描器即可,如:该方案可以不需要研发成本,运维人员自己配上并能使用。它的缺点是:每次调整扫描间隔时间都要重启服务90%以上的扫描都是无用功,因为生产上的日志级别不可能经常有切换需求,也不允许这么做生效不实时,如果设定在一分钟或几分钟扫描一次,那么让日志级别调整后生效就不是即时生效的,不过这个可以忽略该方案满足不了我们的垃圾日志丢弃的需求,比如根据某些关键字丢弃日志的输出。针对这种历史原因打印很免费云主机域名多垃圾日志的情况,考虑到时间成本,不可能让业务研发去优化。当然,还有其它方案,如:自己定义接口api。来直接调用Logger中的setLevel方法,达到调整级别的目的;springboot的集成。这些方案都不避免不了专主于业务开发角色的参与。通过asm动态修改指令,该方案除了能满足调整日志级别即时生效之外。还可以满足过滤日志的需求具体实现如下,在这里就不对asm做介绍了,不了解的同学,需要先去熟悉asm、java agent和jvm的指令:一、idea创建maven工程二、maven引入依赖三、编写attrach启动类四、实现字节码转换处理器五、实现Logger元素的访问者六、最后实现Logger关键方法的访问者该访问者(类),实现日志级别的切换,需要对Logger的三个日志过滤方法进行指令的修改。原理是把命令行入参的日志级别参数值覆盖其成员变量effectiveLevelInt的值,由于篇幅过大,只贴核心部分代码,请看下面:其中modifyLogLevel_1(); modifyLogLevel_2();modifyLogLevel_3();分别对应filterAndLog_1、filterAndLog_2、filterAndLog_0_Or3Plus方法指令的修改。下面只贴modifyLogLevel_1的实现七、最后再编写加载attach Agent的加载类八、打包执行寻找目标程序执行jar效果PS:如果出现校验失败(caused by: java.lang.verifyerror),请配上jvm参数:-noverify感谢各位的阅读,以上就是“JavaASM使用logback日志级别动态切换的方法”的内容了,经过本文的学习后,相信大家对JavaASM使用logback日志级别动态切换的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: 如何使用gRPC

本文小编为大家详细介绍“如何使用gRPC”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用gRPC”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现将自己的一些工具或者免费云主机域名 demo 作品 放到 npm 帮助更多开发…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/07 10:55
下一篇 04/07 10:55

相关推荐