痛点:日志难排查,受成本的原因,又不能随便打日志,生产环境发版本流程困难,生产环境不支持动态调整日志级别。
解决思路:主要在以下场景考虑日志级别的创建
1. 从发起方来解决创建的问题
HTTP请求
如果是HTTP请求,通过前段Header增加logLevel=DEBUG来进行初始化
定时器
使用spring@schedule由于他是自己触发的,所以无法来实现,或者说借助key,redis来实现,但是太麻烦
所以建议从XXL-JOB中下手,xxl-job可以主动触发定时器,并且可以自定义参数,即可自定义LogLevel=DEBUG来实现此功能
2. 从接收方来解决中转传递的问题
MQ消息
通过MQ的properties进行传递,借助message advice 拦截器进行传递
DUBBO
使用dubbo consumerFilter providerFilter 来实现传递即可
OPEN Feign
跟HTTP请求实现方式一致,需要借助到Feign Interceptor来实现传递,需要注意的是,如果是线程隔离,需要考虑Threadlocal的可传递性
日志框架修改支持
以上只解决了logLevel=DEBUG的创建及在微服务之间传递的问题
如何修改日志框架源代码以支持上述目标
以上为log4j2的Logger.java
在isEnable 中 增加过滤判断来实现即可。