需要建议如何从Python中的数据处理中分离日志记录功能

时间:2012-10-29 16:20:14

标签: python logging aop

在我的项目中,我有一组通过调用外部命令来完成某些工作的类,并返回它们的结果。 我们称之为“报告”。

我想向这些报告添加日志记录,但是,将在运行时定义具体的记录器对象而不是 在定义类的时候。

所以,现在我看到两种变体如何实现日志记录:

予。在运行时,实例化一些ReportLogger类实例,可以使用给定的具体记录器对具有日志记录功能的所有给定报告实例进行修补。

优点:

  • 可以将记录应用于我真正需要的任何子报告类,而不是触及其他类。

缺点:

  • 魔法!猴子修补不是明确的做事方式。
  • 日志记录实际上是在运行时应用的,因此在查看类代码时,不太清楚是否有一些日志记录。

II。 Singleton ReportLogger类,它在创建时通过装饰器包装所有报告,但在运行时接受具体的记录器。

优点:

  • 明确且干净的方式来标记这些报告需要记录(以及实际应用它)。

缺点:

  • 处理从基本Report类继承的子类更难。例如,如果在基础Report类中,某些方法(如collect_data())用@log_collect_data修饰,那么对于子类,日志记录将与collect_data()紧密结合。或者,也许,我必须将实际代码从collect_data()拆分为,例如_collect_data()以在子类中修改它,从_collect_data()调用collect_data(),然后换collect_data() 1}}与@log_collect_data

我喜欢第二种方法,但我想要更好的方法来处理子类而不是使用_collect_data()。欢迎任何建议!

0 个答案:

没有答案