Python 记录器不打印“额外”字典信息

Eri*_*mas 5 python logging dictionary

例如,在我的 python 代码中,我将字典传递给记录器。

extra_info = {"test":"data"}
logger.info("",extra=extra_info)    
Run Code Online (Sandbox Code Playgroud)

我希望得到额外的信息来打印,我认为它在消息中,但是当我使用这种格式时

format=%(asctime)s %(levelname)s %(name)s: %(message)s
Run Code Online (Sandbox Code Playgroud)

未打印 extra_info 内容。我只是得到以下

2016/06/17 13:10:47 INFO test:
Run Code Online (Sandbox Code Playgroud)

dot*_*.Py 6

根据logging docsextra关键字参数用于向日志记录添加额外的上下文。

您可以extra通过添加 dict 键来使用通过格式化程序中的参数传递的信息:

format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s - %(EXTRA_DICT_KEY)s'
Run Code Online (Sandbox Code Playgroud)

请注意,如果您像这样设置格式化程序并忘记传递 dict 键,您将收到字符串格式化异常。


正如您在示例中看到的,您没有在格式化程序中指定任何键。

所以,而不是:

format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s'
Run Code Online (Sandbox Code Playgroud)

尝试:

format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s - %(test)s'
Run Code Online (Sandbox Code Playgroud)
  • 您可能会在此处找到一些其他有用的信息。

  • 如何推广这种方法来打印传递的任何额外的键/值对?--> 本质上,我希望记录器具有通用格式(**kwargs-style),它将打印任何“额外”字典,而不必先定义键名称(不必是“test”) (4认同)