库记录器是否应该只有空处理程序?

Should library loggers have only null handlers?

我正在开发一个新库,我对日志记录的概念完全陌生。

我已经使用 Python 的日志模块添加了日志记录。我提供的日志记录有一个特定的 FileHandler 设置为调试级别,StreamHandler 设置为警告级别。 Python 关于日志记录的文档说库应该只有 Null 处理程序。 这是文档 link https://docs.python.org/3/howto/logging.html#library-config

如果我的库中仍然有独占文件和流处理程序,会不会有问题。

我不明白为什么要在库中创建日志,如果它们没有自己的自定义处理程序。

如果有人能消除我对在库中实现日志记录的理解差距,那将非常有帮助。

第二个问题:如果我设置了 Null 处理程序,使用我的库的应用程序开发人员将如何access/enable我在库中创建的日志?

关于你的第一个问题 - [来自 python 文档] -

"The application developer knows their target audience and what handlers are most appropriate for their application: if you add handlers ‘under the hood’, you might well interfere with their ability to carry out unit tests and deliver logs which suit their requirements." 1

作为您图书馆的用户,我可能想显示来自 your_pkg.foo.baz 的日志, 但不是 your_pkg.foo 模块。 从您的库中添加处理程序可能会迫使我这样做(取决于为记录器和处理程序设置的日志级别)。

关于你的第二个问题 - 添加 Nullhandler 允许用户通过 logging.get_logger("your_pkg.foo.baz").add_handler(...).

配置新的处理程序来选择他的自定义日志记录需求

充分理解日志记录机制(记录器、处理程序、过滤器和传播)- 你可以看看这里 - logging flow