为什么每次我将列表添加为关键字arg时,python structlog日志记录都会出现redactError?

2024-06-02 06:53:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是PythonStructLog版本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,
)

Tags: nameevent消息编辑emailaddresseslogging错误
2条回答

问题似乎是structlog.processors.JSONRenderer。。。。当我将structlog.processors.JSONRenderer()更改为structlog.processors.KeyValueRenderer()时,redactError不会发生。我不知道为什么JSONRenderer不喜欢列表,但也许其他人知道

此错误并非来自structlog

看起来您有一个structlog处理器或stdlib日志处理程序试图从日志条目中编辑个人标识信息,而且您的电子邮件地址字段是一个列表而不是一个字符串,这似乎让您感到困惑

我们需要有关日志记录和structlog配置的更多信息来说明更多信息

相关问题 更多 >