python - 使用模块的 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脚本名称和函数名称。
有谁知道如何处理这种情况?
解决方案
我不知道这是否是 100% 最好的解决方案,或者确定它是否适用于您的情况,但我将它用于类似的事情(在多个脚本中持续存在的冗长打印级别)。
创建一个 Python 文件,命名为sessionid
. 在其中,定义一个名为id
. 设置您的 idimport sessionid
和sessionid.id = 'some_id'
. 然后将您的config
文件也导入sessionid
并sessionid.id
根据需要使用。
我花了一点时间才发现我必须像这样访问它;更改它使用from sessionid import id; id = 'some_id'
仅保留在执行此操作的脚本中。
将id
变量放在config
文件中是有意义的,但前提是您不需要将它设置在同样需要from config import logging
.
推荐阅读
- python - 上传到 AWS S3 时如何使用 Django 调整图像大小?
- javascript - 在 php 中获取屏幕宽度以获得最佳广告尺寸
- android - 使用 BottomAppBar 或 BottomNavigationView 创建自定义底部视图
- c# - 为什么并行任务不运行?
- java - Http 响应:无法将 JSON 转换为流
- rest - 您如何使用 API 中的信息,它产生的数据比您可以使用的速度更快?
- ibm-doors - 具有特定终止 DXL 的搜索字符串
- javascript - For 循环初始化程序捕获
- c++ - 使用cmake安装目标目录中存在的dll以安装目录
- mysql - “USING”语句MYSQL缺少右括号错误