python - 允许从 Python 模块自定义日志记录的准则是什么?

标签 python logging

<分区>

我目前正在编写几个执行一些 I/O 的 Python 模块。

这些模块可以由其他开发人员直接使用,也可以通过我编写的简单脚本调用,主要用于测试目的。

我使用了日志记录模块并设置了一个 StreamHandler 来在标准错误输出上显示日志,并且效果很好。但是我不确定如何使这些日志可自定义。显然,当开发人员使用我的类时,我不想强​​制将这些日志写入标准输出。我想给出一个选择,最好是让他添加自己的处理程序,或者如果他不想要日志,则根本不添加。

对于这种情况,是否有任何关于 Python 日志记录的指南?每个类都应该有自己的记录器吗?

简而言之,你是怎么做的,为什么?

谢谢。

最佳答案

确保打算用作库的模块不添加任何处理程序(除了 NullHandler 实例到库的顶级记录器)。

最佳实践是在模块级别使用记录器,使用

logger = logging.getLogger(__name__)

并且,如有必要,使用此记录器的子记录器。

这样,你的库日志事件映射到 Python 包层次结构,你的库模块的用户可以选择是否使用日志记录,如果使用它,如何使用处理程序配置它。

可以在要作为脚本运行的事物中添加处理程序。

只要您的用户可以控制是否调用这些 API,就可以使用方便的 API 将处理程序添加到您的记录器。

关于python - 允许从 Python 模块自定义日志记录的准则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015098/

相关文章:

java - 是否可以在 logback 中禁用特定附加程序/记录器的 MDC 日志记录字段?

python - 包含python3中JSON数据的不同压缩方式

python - 奇怪的字典构造 - 重复键

PHP 日志文件颜色

java - Lombok @Slf4j - 记录到文件

python - 'thread._local' 对象没有属性

java - IBM Mobilefirst 7.1 分析日志记录

python - PyTorch 内存模型 : "torch.from_numpy()" vs "torch.Tensor()"

python - 不确定我是否正确运行线程

python - 使用 OpenCV VideoWriter 和 Python BytesIO 在内存中流式传输视频