【问题标题】:Set default logging level in python在python中设置默认日志记录级别
【发布时间】:2016-10-10 16:40:59
【问题描述】:

我遇到了一个似乎会更改默认日志记录级别的模块(特别是 maya 中的 pymel.core)。当我导入 pymel 时,我正在使用的模块中的所有不同记录器突然设置为调试并开始喷出大量我不想看到的东西。在我看来,pymel 正在更改日志模块中的默认日志级别,但我不太确定在哪里。我查看了日志记录文档,但不确定如何将其设置回原来的状态,我只能看到如何在单个记录器上设置级别。

谁能建议我如何切换默认日志记录级别?

>>> import logging
>>> logging.getLogger().getEffectiveLevel()
30
>>> import pymel.core
>>> logging.getLogger().getEffectiveLevel()
0

我希望能够以某种方式将该默认级别设置回 30,以便我的所有记录器都恢复到从日志模块的默认值继承该级别时的状态。抱歉,如果我误解了日志记录模块的工作原理,我对它很陌生。

【问题讨论】:

  • logging.getLogger().setLevel(logging.WARNING)?无论如何,似乎该软件包的日志记录配置有问题。
  • 您可以在通过logging.getLogger().level = logging.WARNING 导入pymel 后重置记录器级别。请注意,有一个开放的pull request 进行修复,您可能想要求将其合并。

标签: python python-2.7 logging maya pymel


【解决方案1】:

我具体不知道pymel,但它看起来在日志记录方面表现不佳。你可以试试:

if __name__ == '__main__':
    import logging, pymel.core
    logging.getLogger().setLevel(logging.WARNING)  # or whatever
    logging.getLogger('pymel').setLevel(logging.WARNING)

但是,这可能无法阻止输出所有不需要的消息。您可以调整以上内容以适应您在实践中发现的内容。

【讨论】:

    【解决方案2】:

    在 Maya 安装中 site-packages 目录的 pymel 子文件夹中有一个名为 pymel.conf 的文件。它使用默认日志模块中的相同配置文件系统控制 pymel 不同部分的日志设置。

    【讨论】:

      【解决方案3】:

      我和你的情况类似,
      我也尝试以编程方式在互联网上进行大量搜索,
      在这种情况下最好不要使用 import logging ,使用这样的简单函数调用。 ,
      def own_log(msg): with open ("test.log",'a') as fd: fd.write(msg)
      我建议这样做是因为它简单且 logging 模块设置级别 globaly 。

      编辑:
      也许你应该使用一些最佳实践,试试这个logging.getLogger(__name__)

      【讨论】: