如何选择性地传递一个参数给django日志?

1aaf6o9v  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(118)

在我的django日志设置下的formatter -我有一个var:

%(new_line_number)s

我在视图中有一个日志函数,它在最后调用logger.debug,所以在本例中我想传递newlinenumber。

logger.debug('context for %s: %s', product, tool, extra={'newlinenumber':newlinenumber} )

我不想每次调用记录器时都必须传入extra={'newlinenumber':None}。因为这看起来很混乱而且是多余的。我如何才能做到这一点呢?目前如果我不包含

extra={'newlinenumber':None}

在没有newlinenumber的情况下调用记录器时,记录器会出错。我唯一尝试传入newlinenumber的时间是从日志函数调用它的时候。

guicsvcw

guicsvcw1#

也许像这样的东西?

def my_debug_function(my_str, product, tool, ext={'newlinenumber':None}):
    logger.debug(my_str, product, tool, extra=ext)

那么你的用法就是my_debug_function('content for %s, %s', product, tool)
在这里,我想我找到了更好的东西...

def test_log(self, *args, **kwargs):
    kwarg_defaults = {"extra": {"newlinenumber":None}}
    kwarg_defaults.update(kwargs)
    self.debug(*args, **kwarg_defaults)

这个参数的用法与您的调试相同,但不限于另一个参数的3个参数:test_log('content for %s, %s', product, tool)
修改原始的logger.debug是有风险的,但是如果你只是指向它,应该不会有太大的问题。
你可能会说下面的话...

logger.old_debug = logger.debug
def test_log(*args, **kwargs):
    kwarg_defaults = {"extra": {"newlinenumber":None}}
    kwarg_defaults.update(kwargs)
    self.old_debug(*args, **kwarg_defaults)
logger.debug = test_log

相关问题