我们正在构建一个库,用于定期向时间序列数据库报告数据 . 基本上,您创建了Reporter类的对象,并使用它注册了一些指标 . 记者有一个内部线程,它会定期唤醒并将数据发送到后端 .

registry = MetricsRegistry()
reporter = Reporter(registry, reporting_interval=5)
reporter.start()
cpu_gauge = registry.gauge("node.cpu")
cpu_gauge.set_value(60)
time.sleep(6)
# when we wake up the data must have been sent

...

通常,如果报告者的报告API是同步的并且已公开,我们会将报告调用包装在 try/except 块中并记录任何异常 . 例如:

try:
    reporter.report_now()
except Exception as e:
    self.logger.error("Reporter failed", e)

但是,在这种情况下,报告发生在后台线程中 . 为了记录发生的异常,我们是否应该要求库的用户在创建报告器时传递 Logger 参考?这不是一个内部库,而是我们的客户将使用的东西,所以我想知道Python世界中遵循的一般最佳实践 .