背景
rpc请求的时候,上游调用下游,希望记录一些通用的日志,比如耗时,调用方名字,被调用方名字,集群名等,如果每个业务代码都自己写一遍调用不同下游的代码,过于繁琐
需要有一个记录调用日志的组件,封装所有上游调用下游的请求
定义
from_method:调用方名字
called:被调用方服务标志
method:被调用方的方法名
to_cluster:被调用方的集群名
rpc_status:调用结果记录,成功还是失败
上游可以根据需要更加细化,比如包含cluster名称,集群环境等
实现
这个框架就不涉及到服务调用,不用读写某个key了
框架上用middleware,切面等方式(我是以py的django框架为基础,其他语言也有自己的框架),该中间件的处理在upstream调用下游的时候
比如upstream在调用downstream的方法methodName的时候,
核心伪代码
st_time=time.time()
info_map["from_method"] = request.get("from_method")
info_map["called"] = request.get("called")
info_map其他赋值 xxx
doRequest(request) //后续Middleware处理
duration = time.time()- st_time
info_map['duration'] = duration
logger.info(info_map)