我想将触发错误级别日志的方法的参数注入日志。
我研究了这个问题,我认为检查库可能是获得方法的论据的一个好选择:Getting method parameter names in python
import inspect
def add(x,y):
frame = inspect.currentframe()
try:
print(frame.f_locals)
finally:
del frame
return x+y
Running: add(4,5)
Returns: {'frame': , 'y': 5, 'x': 4}尽管理想情况下,我只想调用上面的检查代码来自动地将信息添加到错误级别日志中,并且只有当它们被调用时才会覆盖错误日志。
发布于 2016-11-30 13:16:21
这是一个有趣的问题。基本上你可以:
inspect.stack从新的error函数获取调用方帧logging.error覆盖默认的here函数functools.wraps使包装函数看起来像包装函数结果如下:
from functools import wraps
import logging
import inspect
# save the old logging.error function
__logging_error = logging.error
@wraps(logging.error)
def error(msg, *args, **kwargs):
__logging_error(msg, *args, **kwargs)
caller = inspect.stack()[1]
caller_frame = caller[0]
__logging_error('args: %s' % caller_frame.f_locals)
# overwrite the default logging.error
logging.error = error现在代码:
def add(x, y):
logging.error('this is an error')
return x + y
add(4, 5)产出:
ERROR:root:this is an error
ERROR:root:args: {'y': 5, 'x': 4}https://stackoverflow.com/questions/40887624
复制相似问题