擅长:python、mysql、java
<p>要跟踪特定的调用,可以用自己的记录器包装每个有趣的函数。这会导致参数扩展为其值,而不仅仅是输出中的参数名。在</p>
<p>函数必须作为字符串传入,以防止模块重定向到其他模块的问题,例如操作系统路径/posixpath。我认为你不能仅仅从函数对象中提取正确的模块名来修补。在</p>
<p>包装代码:</p>
<pre><code>import importlib
def wrapper(ffull, f):
def logger(*args, **kwargs):
print "TRACE: %s (%s, %s)" % (ffull, args, kwargs)
return f(*args, **kwargs)
return logger
def log_execution(ffull):
parts = ffull.split('.')
mname = '.'.join(parts[:-1])
fname = parts[-1]
m = importlib.import_module(mname)
f = getattr(m, fname)
setattr(m, fname, wrapper(ffull, f))
</code></pre>
<p>用法:</p>
^{pr2}$