尽早设置日志记录:在导入期间捕获警告

gue*_*tli 5 python logging

我希望通过我希望处理日志的方式来处理所有警告.甚至在导入库期间发出的这些.

这意味着必须在导入库之前完成日志记录的配置.

搜索一段时间之后,我认为在自定义中配置日志记录sitecustomize.py可能是一种解决方案

sitecustomize.py不知何故,黑魔法只有少数人知道它,甚至更少的人使用它.

有没有更明显的方法来确保在导入库之前完成我的日志配置?

不幸的是,似乎无法通过环境变量配置日志记录.

更新

根据我的观点,我没有得到任何可以接受的答案.我认为你需要将登录分为两个责任区:

  • 环境:设置日志:哪种格式,哪些文件...
  • 代码:使用日志记录.发出信息,警告和错误消息.

一旦第一行代码被python解释器执行,区域"环境"就对代码负责.现在做任何配置都为时已晚.我想看看将日志记录设置为调用python解释器的一部分.

一种解决方案可以是环境变量:

PYTHON_LOGGING_CONFIG=/path-to-env/etc/config.yaml
Run Code Online (Sandbox Code Playgroud)

或者是翻译的参数:

python --logging-config=path-to-env/etc/config.yaml script.py
Run Code Online (Sandbox Code Playgroud)

zvo*_*one 5

如果您希望日志记录覆盖导入,那么在导入任何其他内容之前显然无法显式配置日志记录.

但是,如果您希望日志记录配置更加明显,那么有各种技巧可以帮助您实现这一点.例如,您的脚本可以像这样简短,只是为了强调特殊情况:

import siteconfiguration
siteconfiguration.configure_site()  # This must be done before any other import

import application


if __name__ == "__main__":
    application.run()
Run Code Online (Sandbox Code Playgroud)

这仍然打破了将所有进口放在首位的规则,但它也明确说明了为什么要这样做.使用该代码的每个人都将理解您的意图.

特殊情况不足以打破规则.

虽然实用性胜过纯洁.

(Python的禅宗,Tim Peters)