痛点:日志难排查,受成本的原因,又不能随便打日志,生产环境发版本流程困难,生产环境不支持动态调整日志级别。

解决思路:主要在以下场景考虑日志级别的创建

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 中 增加过滤判断来实现即可。