首页 > 解决方案 > 使用模块的 Python 日志记录

问题描述

我有多个模块,由主脚本调用。每个都使用 logging Python 内置包记录消息。

如何在所有模块中记录在主脚本执行期间设置的会话 ID,而无需在每个模块中推送此变量?

我已经设置了一个名为 config 的 python 配置文件,其中包含:

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format="%(filename)s:%(lineno)s|%(funcName)3s()|%(asctime)s|%(levelname)s|%(message)s",
    handlers=[
        logging.FileHandler("debug.log"),
        logging.StreamHandler()
    ]
)

其他模块正在使用这个预先配置的日志对象,通过导入,所以我使用这个:

from config import logging

但我需要从当前会话中记录一个 ID,我的日志应如下所示:

模块名称.py:25|函数名称()|2020-04-27 18:28:26,518|信息| Session_ID=abc123 |some_message_here

我试图把这个变量放在配置文件中,设置它,然后在这个文件中名为“log_info”和“log_debug”的函数中使用它,但是我的输出日志不再跟踪python脚本名称和函数名称。

有谁知道如何处理这种情况?

标签: pythonloggingmodule

解决方案


我不知道这是否是 100% 最好的解决方案,或者确定它是否适用于您的情况,但我将它用于类似的事情(在多个脚本中持续存在的冗长打印级别)。

创建一个 Python 文件,命名为sessionid. 在其中,定义一个名为id. 设置您的 idimport sessionidsessionid.id = 'some_id'. 然后将您的config文件也导入sessionidsessionid.id根据需要使用。

我花了一点时间才发现我必须像这样访问它;更改它使用from sessionid import id; id = 'some_id'仅保留在执行此操作的脚本中。

id变量放在config文件中是有意义的,但前提是您不需要将它设置在同样需要from config import logging.


推荐阅读