如何使用它在 Python 中传播的方法参数覆盖错误日志记录?
How to override error logging with method arguments it propagates from in Python?
我想将触发错误级别日志的方法的参数注入到日志中。
我看了这个问题,我认为 inspect 库可能是获取方法参数的不错选择: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}
虽然理想情况下我只想调用上面的检查代码来自动将信息添加到错误级别日志中,并且仅当它们被调用时以某种方式覆盖错误日志。
这是一个有趣的问题。基本上你可以:
使用 inspect.stack
从新的 error
函数中获取调用者框架
覆盖默认值logging.error
function as explained 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}
我想将触发错误级别日志的方法的参数注入到日志中。
我看了这个问题,我认为 inspect 库可能是获取方法参数的不错选择: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}
虽然理想情况下我只想调用上面的检查代码来自动将信息添加到错误级别日志中,并且仅当它们被调用时以某种方式覆盖错误日志。
这是一个有趣的问题。基本上你可以:
使用
inspect.stack
从新的error
函数中获取调用者框架覆盖默认值
logging.error
function as explained 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}