在共享库中登录Python的最佳做法

简而言之,我编写了ETL管道。它们通常在高级脚本中描述。在它们中,我使用不同的内部库(我们来管理它们),这些库提供实用程序功能,工具或内部数据结构。

在处理从不同存储库导入的多个软件包时,有关日志记录的常见最佳实践是什么?

我的问题是:

1)我应该将日志放入库中吗?还是仅在顶级脚本中?

一方面,在某些库函数/类中显示某些信息可能很有用。另一方面,它强加了特定记录器的库客户端用法。

我检查了几个开源项目,似乎根本没有日志。

2)如果确实将日志放入所有共享库中,那么将唯一的记录器传递给所有内容的Python最佳实践是什么?

我希望我的日志记录格式和策略在每个库调用中保持一致,因为一切都作为“整体”运行。是否应该在主脚本中初始化记录器,并在创建的每个对象中传递相同的记录器?对我来说似乎多余。我看到了另一种模式,其中所有需要记录的类都将从记录类继承。在我看来,这可能会过大,并使整个体系结构复杂化。

我在另一个stackoverflow中读到,实际上每个记录器都是父级包记录器的子级当软件包来自不同的存储库时,如何应用?

谢谢

布鲁斯

将没有处理程序(或仅包含null handler的记录器添加到库中,并使用该记录器进行所有内部记录。给它一个与库相关的名称。当您执行此操作时,任何使用lib的应用程序都可以获取记录器,并根据需要添加处理程序以访问日志。

一个例子就是请求库,它执行类似的操作。

import logging
import requests
r = logging.getLogger('requests')
r.addHandler(logging.StreamHandler())
r.setLevel(logging.DEBUG)
requests.get('http://stackoverflow.com')

将打印

Starting new HTTP connection (1): stackoverflow.com
http://stackoverflow.com:80 "GET / HTTP/1.1" 301 143
Starting new HTTPS connection (1): stackoverflow.com
https://stackoverflow.com:443 "GET / HTTP/1.1" 200 23886

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章