Python日志器没有打印出“extra”字典信息

7
在我的Python代码中,例如,我将字典传递给记录器。
extra_info = {"test":"data"}
logger.info("",extra=extra_info)    

我希望能够打印出额外的信息,我认为这些信息在消息中,但当我使用这种格式时

format=%(asctime)s %(levelname)s %(name)s: %(message)s

额外信息的内容没有被打印出来。我只是得到了以下的结果。
2016/06/17 13:10:47 INFO test:

是的,那只是一个打字错误,谢谢。 - Eric Thomas
1个回答

9
根据 logging文档extra 关键字参数用于向日志记录添加额外的上下文信息。
您可以通过添加字典键,在格式化程序中使用通过 extra 参数传递的信息。
format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s - %(EXTRA_DICT_KEY)s'

请注意,如果您设置了这样的格式化程序并忘记传递字典键,则会导致字符串格式化异常。
在您的示例中可以看到,您没有在格式化程序中指定任何键。
因此,应该改为:
format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s'

尝试:

format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s - %(test)s'

  • 您可以在此处找到其他有用的信息。

好的,谢谢。我在阅读那一部分时有些误解,以为它只是通过消息添加的。所以基本上我需要做的就像我的例子一样添加%(test)s,然后它就可以工作了。非常感谢。 - Eric Thomas
2
你如何将这种方法推广到打印传递的任何额外键/值对? --> 本质上,我希望记录器具有通用格式(**kwargs样式),可以打印任何“extra”字典,而无需事先定义键名(不必是“test”)。 - KingOtto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接