日志记录的“额外”参数如何工作?

时间:2019-11-01 10:02:11

标签: python

我正在努力弄清楚extra日志记录的工作原理。我需要更改一些使用它的旧代码,并且这些代码也需要登录到stdout。

import logging

log = logging.getLogger()
handler = logging.Streamhandler(sys.stdout)
handler.setLevel("INFO")
formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
handler.setFormatter(formatter)
log.addHandler(handler)

log.error("fly you foos!", extra={"City": "Mordor"})

OUTPUT:
2019-10-31 16:19:04,422 | root | ERROR | fly you foos!

上面的记录为fly you foos!,但对多余的参数没有任何作用。这是有道理的,因为实际上并没有以任何方式使用额外的参数。

但是根据此documentation,我可以更改格式化程序以包括附加的字典键“城市”:

formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s | %(City)s')

OUTPUT:
2019-10-31 16:19:04,422 | root | ERROR | fly you foos! | Mordor

这给了我正确的日志行,但是它也给了我KeyError,因为我使用log的其他所有地方现在也都需要字典作为参数了。其中包含键City。这显然是不可行的,因为它需要更改每个使用的实例log,添加冗余参数以适合Formatter。

我想知道传统上还有多少额外的用途,或者我还不了解的任何细微差别。理想情况下,我希望每次都看到异常的extra部分,而不必更改Formatter。

0 个答案:

没有答案