【问题标题】:Add session ID or some unique ID per session in python logs在 python 日志中为每个会话添加会话 ID 或某些唯一 ID
【发布时间】:2021-09-28 14:17:26
【问题描述】:

我有 python 烧瓶微服务,我们在其中使用 python 的logging library。我想在日志中为每个会话添加请求会话 ID 或任何其他唯一 ID,因此我可以轻松地 grep 特定请求的日志。

我们在 java 中的微服务上使用this. 做了同样的事情。我想在 python 中做同样的事情。我该怎么做。

此外,我们现有代码中已经有很多日志,我想通过修改现有日志调用来实现这一点(或者可能进行一些小的修改,例如将一些参数传递给日志函数)

目前我们的日志格式是这样的

formatter = logging.Formatter('[%(asctime)s] - [%(threadName)s] [%(thread)d] - %(levelname)s in %(module)s at %(lineno)d: %(message)s')

【问题讨论】:

    标签: python flask python-logging


    【解决方案1】:

    use an adapter or add a filter 到您的日志。适配器将包装您的记录器,而使用过滤器您将修改 LogRecord 对象。

    使用适配器会有点像这样:

    import logging
    
    # either user flasks builtin app.logger, or replace with your own logger
    request_id = 123 # implement however you prefer
    app.logger = CustomAdapter(app.logger, {'request_id': request_id})
    

    并在您的格式化程序中的某处使用%(request_id)sapp.logger 是flask 提供的标准记录器。

    【讨论】:

    • 感谢您的回复。我不明白我应该把你建议的线放在哪里。我有控制器、服务和实用程序功能。我想为每个会话添加请求 ID 或一些唯一 ID,请您多解释一下。
    • 您将这些行放在记录器可用且请求 id 已知的最早时刻,因为在该行之后,使用 app.logger 创建的每个日志都将具有 request_id 属性.这取决于您的应用程序的设置,但应该不难找到最佳位置。
    • 它适用于控制器等相同的文件日志。当控制流从控制器转移到服务功能时,我如何为服务日志维护相同的 ID(由控制器创建)?并且可以从多个控制器调用相同的服务功能!
    猜你喜欢
    • 2010-10-23
    • 2011-08-19
    • 2019-12-13
    • 2018-05-15
    • 2015-01-12
    • 2015-02-23
    • 2010-09-13
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多