如何有选择地将参数传递给Django日志记录?

时间:2018-06-21 23:32:25

标签: python django logging

在格式化程序下的Django日志记录设置中-我有一个var:

%(new_line_number)s

我的视图中有一个日志记录功能,该函数最后调用logger.debug,因此在这种情况下,我想传递换行号。

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

我不想每次致电记录器时都传递extra = {'newlinenumber':None}。因为这看起来很乱而且很多余。我该怎么做?目前,如果我不包括在内

extra={'newlinenumber':None}

在没有换行号的情况下,记录器会在任何时候出错。 我唯一尝试传递换行号的时间是当我从日志记录函数调用它时。

1 个答案:

答案 0 :(得分:0)

也许是这样吗?

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