在Flask Web中,通常需要为全链路中的各个调用函数传递一个traceid作为调用参数。
背景
在Flask Web中,我们通常需要为全链路中的各个调用函数传递一个traceid作为调用参数。
-
需要为每个请求创建一个唯一的traceid:这里使用uuid来简化代替。
-
需要保证traceid不受污染,在每个请求期间保持存在,在请求结束时销毁且线程独立:这里通过Flask中的g对象来存储线程内的数据。
-
由于我们使用g对象来存储,那么当接口中发起新的请求时,新请求会创建新的g对象,此时g对象为空,我们需要让traceid可以在多个请求中共享数据:这里通过请求头中增加traceid来传递。
实现
首先定义两个主要函数:
-
定义一个在请求开始时需要调用的函数,用于初始化traceid或获取上一个请求中的traceid以及其他一些相关请求参数。
-
定义一个在请求结束时需要调用的函数,用于记录请求结束的日志和响应报文。
接着,通过钩子函数触发上述所写的两个重要函数。
最后编写测试接口进行测试。
这样,我们通过traceid成功地将整个链路串联起来了。