如何使用它在 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}

虽然理想情况下我只想调用上面的检查代码来自动将信息添加到错误级别日志中,并且仅当它们被调用时以某种方式覆盖错误日志。

这是一个有趣的问题。基本上你可以:

结果如下所示:

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}