python - 为什么每次我将列表添加为关键字 arg 时,python structlog 都会记录一个 redactError?
问题描述
我正在使用 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,
)
解决方案
看来问题是 structlog.processors.JSONRenderer.... 当我更改structlog.processors.JSONRenderer()
为structlog.processors.KeyValueRenderer()
时,redactError 不会发生。我不知道为什么 JSONRenderer 不喜欢列表,但也许其他人知道。
推荐阅读
- qt - 如何根据 QML 中不同 QAbstractListModel 的元素实现列表?
- c# - if 语句中的异步等待
- r - 如果单词在R中的列中重复,则合并行
- python-3.x - python不会刮掉文本,而是给我一个空白
- xamarin.forms - 从左侧截断标签文本
- c++ - SetWindowsHookEx WH_JOURNALRECORD 阻止鼠标点击 + 击键
- java - 词法分析器:区分是机器码和数轴
- arrays - 随机整数元素可能具有不同范围的数组行
- javascript - 使用 javascript 获取 type="color" 输入值时的错误
- snowflake-cloud-data-platform - 如何将增量json格式数据从一个表转换为另一个表格格式的表