在我的项目中,我有一组通过调用外部命令来完成某些工作的类,并返回它们的结果。 我们称之为“报告”。
我想向这些报告添加日志记录,但是,将在运行时定义具体的记录器对象而不是 在定义类的时候。
所以,现在我看到两种变体如何实现日志记录:
予。在运行时,实例化一些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()。欢迎任何建议!