【发布时间】:2020-04-13 15:47:03
【问题描述】:
我正在努力让 Python 以我想要的方式记录。我通过添加过滤器并更新格式字符串以打印过滤器中的内容,为我的日志语句添加了一些上下文。只要所有代码是我的,就可以按预期工作。
但如果第 3 方模块记录了某些内容,则会引发错误,因为该模块不知道我的过滤器。
如何在不破坏 3rd 方模块日志记录的情况下将上下文添加到我的日志中?
此代码在我的模块中运行良好。但是如果第 3 方模块想要记录某些内容,他们不知道我的 ContextFilter,它详细说明了我想要在我的日志消息中的 nstid。
import logging
import sys
import boto3
from ContextFilter import ContextFilter
logging.basicConfig(
format='%(asctime)s %(levelname)-8s nstid:%(nstid)8s %(message)s',
handlers=[logging.StreamHandler(sys.stdout)],
level=logging.INFO,
datefmt='%Y-%m-%d %H:%M:%S'
)
log = logging.getLogger(__name__)
log.addFilter(ContextFilter())
log.info("important information")
【问题讨论】:
-
您配置了您的记录器,而不是他们的。您需要查看文档,或者在最坏的情况下查看代码,以查看其他模块使用的记录器。
-
或者,您需要配置根记录器(
logging.getLogger())。 -
@chepner,将我的过滤器添加到根记录器?