如何用Python中传播的方法参数覆盖错误日志记录?
我想将触发错误级别日志的方法的参数注入日志 我看了这个问题,我认为inspect库是获取方法参数的一个好选择:如何用Python中传播的方法参数覆盖错误日志记录?,python,python-3.x,logging,metaprogramming,Python,Python 3.x,Logging,Metaprogramming,我想将触发错误级别日志的方法的参数注入日志 我看了这个问题,我认为inspect库是获取方法参数的一个好选择: 虽然理想情况下,我只想调用上面的inspect代码来自动将信息添加到错误级别日志中,并且只有在调用它们时才会覆盖错误日志。这是一个有趣的问题。基本上你可以: 用于从新的error函数中获取调用者帧 如前所述覆盖默认函数 用于使包装函数看起来像包装函数 结果如下所示: from functools import wraps import logging import inspect
虽然理想情况下,我只想调用上面的inspect代码来自动将信息添加到错误级别日志中,并且只有在调用它们时才会覆盖错误日志。这是一个有趣的问题。基本上你可以:
- 用于从新的
函数中获取调用者帧error
- 如前所述覆盖默认函数
- 用于使包装函数看起来像包装函数
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}
谢谢你的回答,你的代码抛出了一个递归错误,但退一步到堆栈中是解决我问题的一个简单方法。@chrisvlll:这很奇怪,它没有向我抛出任何东西。在这里尝试整个脚本:抱歉,我在ipython中运行了多次,由于猴子补丁,它抛出了一个递归错误
ERROR:root:this is an error
ERROR:root:args: {'y': 5, 'x': 4}