我正在使用 python structlog 版本 19.1.0 ( https://www.structlog.org/en/19.1.0/index.html ),在以前的部署中,我使用了相同的版本并且没有收到任何 redactError 消息我的日志。但是现在,每当我将关键字 args 添加到日志消息时(特别是如果该值是一个列表),它也会记录一个 redactError。
我的代码:
logger = structlog.get_logger()
logger.debug("My custom event name", email_addresses=["some.email.address@mail.com"])
日志消息:
{"event":"My custom event name", "email_addresses":["some.email.address@mail.com"], "level":"info", "msg":"\u003cnil\u003e", "redactError":"1 error occurred:\n\t* error redacting item email_addresses: 1 error occurred:\n\t* error redacting item 0: unknown interface interface {} not redacted\n\n\n\n","request":"b8214486-d270-416b-ba3a-cc36b784c19d", "stream":"stderr", "thread":140500243846912, "time":"2020-07-22T19:28:50Z","timestamp":"2020-07-22T19:28:50.737388Z"}
我不知道为什么它redactError
显然仍然能够在日志消息中添加关键字参数时给我一个。我还注意到,如果列表长于 1,则会在redactError
字符串中添加更多错误(例如,每个索引的“错误编辑项 <>:未知接口接口 {} 未编辑\n”)。
我真的很困惑为什么我会收到这个错误。它并没有干扰我的代码执行能力,它只是真的把日志弄得一团糟。任何帮助表示赞赏!
编辑:感谢下面的一些评论。添加我的日志记录配置以防出现问题:
# setting up the logging config
level = getattr(logging, "DEBUG")
formatter = logging.Formatter("%(message)s")
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger = logging.getLogger()
logger.setLevel(level)
logger.addHandler(sh)
processors = [
structlog.stdlib.filter_by_level,
structlog.stdlib.add_log_level,
structlog.stdlib.add_logger_name,
structlog.processors.format_exc_info,
structlog.processors.TimeStamper(fmt='iso', utc=True),
structlog.processors.StackInfoRenderer(),
add_thread,
structlog.processors.JSONRenderer(),
]
structlog.configure(
processors=processors,
context_class=structlog.threadlocal.wrap_dict(dict),
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)