如何防止模块级日志记录功能破坏记录器?

kuzzooroo

考虑一下我在Python 2.7.6下运行的以下代码片段:

import logging, sys

assert (__name__ not in logging.Logger.manager.loggerDict)
logger = logging.getLogger(__name__)
stdout_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stdout_handler)

logger.error("You'll see this once")
logging.debug("Imagine logging now happens in some other module, maybe via an import")
logger.error("You'll see this twice")
logger.propagate = False
logger.error("BUT this you'll only see once")

它给出以下输出:

You'll see this once
You'll see this twice
ERROR:__main__:You'll see this twice
BUT this you'll only see once

问题似乎是logging.debug调用logging.basicConfig:

上面的模块级便捷函数委托给root记录器,调用basicConfig()来确保至少有一个处理程序可用(源)

我想简单地摆脱“不要使用模块级便捷功能”规则,但可怕的是,任何使用这些功能(或调用logging.basicConfig)的模块都会破坏其余的日志记录。因此,取而代之的是,课程可能是“对于以父级记录器为根的记录器始终使用property = False,”,但这并不对劲–传播必须出于某种原因默认为True。有没有更好的办法?

维奈·萨吉普(Vinay Sajip)

可怕的是,使用这些功能(或调用logging.basicConfig)的任何模块都会破坏其余的日志记录

是的,可以,但是那些模块不会遵循良好的做法(已记录)。实际上,在上面的代码段中,您做错了-NullHandler除了if __name__ == '__main__主脚本中调用的代码之外,您不应将处理程序附加到记录器(除外)导入代码应该没有副作用。

模块级的便捷功能适用于简短的脚本,简单的用法以及刚开始使用日志的人员。当记录要求超出此范围时,不打算使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使日志记录模块功能使用其他记录器?

来自分类Dev

Python日志记录,如何过滤特定的记录器

来自分类Dev

Python日志记录,如何过滤特定的记录器

来自分类Dev

使用root记录器禁用导入模块的日志

来自分类Dev

如何防止log4j日志重定向到root记录器

来自分类Dev

Firebase功能记录器日志未定义

来自分类Dev

Java日志记录全局记录器

来自分类Dev

Java日志记录全局记录器

来自分类Dev

如何更改未命名记录器的python日志级别?

来自分类Dev

如何更改 Heroku 自己的记录器日志

来自分类Dev

Python日志记录:为使用过的模块的所有记录器设置处理程序

来自分类Dev

Python3压缩记录器模块实时记录日志

来自分类Dev

在Python日志记录中跨多个模块访问记录器

来自分类Dev

Python日志记录:为使用过的模块的所有记录器设置处理程序

来自分类Dev

在Python日志记录中跨多个模块访问记录器

来自分类Dev

如何禁用其他模块的记录器?

来自分类Dev

如何使用简单的节点记录器模块

来自分类Dev

如何将根记录器上的日志重定向到自定义记录器?

来自分类Dev

自己的星号模块(SIP记录器)

来自分类Dev

多个模块的Python多重记录器

来自分类Dev

如果禁用了记录器,则防止创建空的日志文件

来自分类Dev

如何创建2个不同的带有日志记录的ROOT记录器?

来自分类Dev

如何使用自定义记录器在Spring Boot中记录访问日志

来自分类Dev

如何编写在C ++中进行实际日志记录的变量参数记录器函数

来自分类Dev

带重新加载重复日志记录的记录器

来自分类Dev

记录器实例不返回任何日志记录

来自分类Dev

根记录器为何接受子记录器的日志?

来自分类Dev

日志记录-如何忽略导入的模块日志?

来自分类Dev

如何在pyspark中使用log4j配置特定记录器的日志级别?

Related 相关文章

  1. 1

    如何使日志记录模块功能使用其他记录器?

  2. 2

    Python日志记录,如何过滤特定的记录器

  3. 3

    Python日志记录,如何过滤特定的记录器

  4. 4

    使用root记录器禁用导入模块的日志

  5. 5

    如何防止log4j日志重定向到root记录器

  6. 6

    Firebase功能记录器日志未定义

  7. 7

    Java日志记录全局记录器

  8. 8

    Java日志记录全局记录器

  9. 9

    如何更改未命名记录器的python日志级别?

  10. 10

    如何更改 Heroku 自己的记录器日志

  11. 11

    Python日志记录:为使用过的模块的所有记录器设置处理程序

  12. 12

    Python3压缩记录器模块实时记录日志

  13. 13

    在Python日志记录中跨多个模块访问记录器

  14. 14

    Python日志记录:为使用过的模块的所有记录器设置处理程序

  15. 15

    在Python日志记录中跨多个模块访问记录器

  16. 16

    如何禁用其他模块的记录器?

  17. 17

    如何使用简单的节点记录器模块

  18. 18

    如何将根记录器上的日志重定向到自定义记录器?

  19. 19

    自己的星号模块(SIP记录器)

  20. 20

    多个模块的Python多重记录器

  21. 21

    如果禁用了记录器,则防止创建空的日志文件

  22. 22

    如何创建2个不同的带有日志记录的ROOT记录器?

  23. 23

    如何使用自定义记录器在Spring Boot中记录访问日志

  24. 24

    如何编写在C ++中进行实际日志记录的变量参数记录器函数

  25. 25

    带重新加载重复日志记录的记录器

  26. 26

    记录器实例不返回任何日志记录

  27. 27

    根记录器为何接受子记录器的日志?

  28. 28

    日志记录-如何忽略导入的模块日志?

  29. 29

    如何在pyspark中使用log4j配置特定记录器的日志级别?

热门标签

归档