本文主要讲解apollo动态配置实现接口日志打印,阅读本文大概需要8分钟。
前言
想必大家在开发中都会碰到过这么几种情况,接口日志很难查啊,服务器日志太多看的眼花缭乱。这还好可以通过前面讲的熟悉这些Java排查工具就够了一些工具完成,关键是服务器日志堆积告警,尤其是qa环境(quality assurance), 然后你收到这条短信报警连忙登录到机器,开始了一顿rm操作解决了美滋滋,过了半小时,你又收到一条短信告警,很熟悉,又是这个...
于是你开始寻思这哪里天天来的这么多日志打印,出于好奇的你打开了温顺的IDEA,看着满屏的代码,时不时轻微右键看看git master 提交者,知道真相的你都想砸电脑了。
循环体里一堆日志,日志相似度很高,每个接口的参数和结果都打日志,debug日志没删除,居然还有带有'xxxTest'字样日志,从头到尾没看到一条Warn日志,除了Info日志就是Error日志,实在看不下去了要合电脑了,突然看到某个类以xxxAspect结尾的文件?哦?难道这是业务切面?出于好奇点进去一看,尼玛 日志切面,切入点是所有biz业务代码方法...
那么,针对日志不规范,服务器日志太多,日志治理这块我们有什么解决方案呢,于是灵机一动,万物且可配置,是不是这个东西可以做成配置的呢,于是你就开始着手设计了起来。
这么多类,这么多方法,我是不是每个接口的日志打印如何能做成开关控制就好了?搞定!
开关控制做好了,那么打印日志的内容呢,我需要打印哪些内容合适呢?入参?返回值?
日志打印的内容为接口的入参、响应结果,响应耗时..可扩展参数等等。搞定!
日志打印内容定好了,那么日志打印级别呢?每个方法每个场景可能不一样啊,不同环境我也想不一样怎么办呢?
懂了,不是万物皆配置么,我做成配置不就好啦,配置几种不同的策略即可,搞定!
*配置?我用什么做配置呢,我这个项目是分布式项目,于是经过balabala一顿百度 你可能看到有可选的diamond、apollo、disconf 等,于是你丢骰子最后选择了apollo,其实都可以哈哈哈,理解理解。
通过控制接口的黑白名单日志打印实现动态日志打印,搞定!
好了,思路有了,开始coding尝试实现起来。
apollo动态配置实现接口日志打印
首先,我们定义一个控制开关策略的枚举LogSwitch。
其次,日志打印的内容我们也定义一个枚举 LogDimension.
好了,接下来打印的日志关键要素已经形成,我们需要定义一个切面类来完成。
既然有切面,那我们就可以一个切入点注解来完成我们的切面,定义日志打印注解LogAnnotation 不需要任何属性,对我们来说只是一个切面标识。
接下来可以写我们的切面类了,我们定义 LogAspect 。
总结一下
动态日志打印由相应的Aspect进行日志统一输出主要解决的是日志输出逻辑固定、日志输出过多,排查问题无法动态调整日志内容。结合apollo以及注解 可动态调节关注点、 可动态控制日志输出内容 的统一切面工具。使用方式也特别简单,在代码内需要被LogAspect动态管理日志的方法加上@LogAnnotation注解即可。
上面一切完成,那么今后你再也不用担心查看接口日志找不到了,你可以按照你想要的配置一下就可以啦!
本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:橘松Java技术窝!
暂无评论
违反法律法规
侵犯个人权益
有害网站环境