【发布时间】:2013-08-21 17:12:33
【问题描述】:
我想编写一个类来显示当前工作功能的树,这意味着:
假设我有函数 A 先调用函数 B,然后函数 C,函数 C 调用函数 D。在时间 t = 1,B 正在运行,所以我希望标准输出为:
Root: function A -> running properly, called B
2-nd: function B -> running properly
在时间 t = 2 时,B 又回到了 A,所以 stdout 变为:
Root: function A -> running properly, B returned
在时间 t = 3,A 调用了 C。在时间 t = 4,C 调用了 D。标准输出应该是:
Root: function A -> running properly, B returned, called C
2-nd: function C -> running properly, called D
3-rd: function D -> running properly
在时间 t = 5,D 返回。在时间 t = 6,C 返回。标准输出应该是:
Root: function A -> running properly, B returned, C returned
在时间 t = 7,函数 A 返回:
Root: function A -> Done
除了创建一个记录器对象并传递它之外,有没有更优雅的方法来自动化它?如果 A 或 B 是多线程进程怎么办?
非常感谢任何建议。谢谢!
【问题讨论】:
-
你看过
inspect模块吗?您已经可以从那里获取堆栈和跟踪。 -
我没见过。当我读到它时,也许它是可用的。然而,我想要一种干净的记录方式。如果我使用检查,似乎我必须在每个函数调用之前调用一组函数来获取信息。这将与 logger 对象相同,只是它是内置的并且很棒。
标签: python logging build-automation