在 Flask 中记录每条路由的相关 ID

Posted

技术标签:

【中文标题】在 Flask 中记录每条路由的相关 ID【英文标题】:Logging correlation id per route in Flask 【发布时间】:2021-07-16 18:48:26 【问题描述】:

我是 flask 的新手,想从请求中读取自定义关联 ID 并将其记录下来以跟踪每个路由的功能。 我在express 中使用了类似功能的库,并通过HandlerInterceptor 在Java 中使用了实现,并在MDC 中设置了提取的标头值

我看到了一些与烧瓶相关的 python 库,但它们的实现方式是读取预定义的标头名称,而不是允许自定义标头名称并在整个请求生命周期中记录它

关于读取和记录请求标头值以及使用 Flask 应用程序在响应中设置一些唯一 ID 的任何建议

【问题讨论】:

【参考方案1】:

终于找到答案here。我们可以使用flask.glogging.config 和过滤器的概念,因为我已经通过通用的 logging.config 和模式配置了整个应用程序。此外,我什至需要通过自定义请求标头读取关联 ID,比如说 Correlation-ID,或者如果没有找到创建唯一 ID,那么围绕这方面也进行了一些更改。

【讨论】:

【参考方案2】:

试图回答这个问题

在请求之前注册您的记录器

@app.before_request
def init_req():
    g.logger = create_logger("req-"+str(uuid.uuid4()))

使用g.logger 编写您的记录器

创建logger函数可以这样

def create_logger(name: str):
    return logging.getLogger(name)

【讨论】:

以上是关于在 Flask 中记录每条路由的相关 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flask API 路由系统中定义基本路由

Flask的路由,视图和相关配置

Flask 中路由系统

在 Erlang 中将消息路由到 PID

Flask 在 URL 中添加斜杠,没有路由匹配

Flask:一次装饰每条路线?