如何解决Python 结构日志 JSON
我目前正在使用 python structlog JSONRenderer 并希望更改我的日志配置以将事件呈现为第一个 JSON 属性以获得更好的可读性。
当前配置:
structlog.configure(processors=[structlog.processors.JSONRenderer()])
log = structlog.get_logger()
当前日志调用站点:
log.msg("Response: ",content_type=content_type,content_length=resp.headers.get('content-length'),status_code=resp.status_code
)
电流输出:
{"content_type": "application/json","content_length": null,"status_code": 200,"event": "Response: "}
期望的输出:
{"event": "Response: ","content_type": "application/json","status_code": 200}
如有任何帮助,我们将不胜感激。
解决方法
除非您指定另一个可调用对象,否则 structlog.processors.JSONRenderer
只会将日志对象传递给 json.dumps
:
structlog.configure(processors=[structlog.processors.JSONRenderer(serializer=mydumps)])
然后,mydumps
将成为一个函数,它执行 json.dumps
的功能,但将 event
放在首位。这可能看起来像:
def mydumps(dic,**kw):
mod = {}
if 'event' in dic:
mod["event"] = dic["event"]
for k in dic:
if k!="event":
mod[k] = dic[k]
return json.dumps(mod,**kw)
它所做的是创建一个新对象,然后在输入对象中查找 event
键并将其首先放入新对象中,然后继续将其余键放入对象中并将其与 {{ 1}} 到 **kw
。
请注意,通过这种方式,您无需事先指定日志可能具有的其他键(如内容类型),因为任何事件类型都可能具有不同的信息。
,看起来您可能使用的是比 3.6 更旧的 python 版本,它使键按插入顺序排列。您可以使用 json.dumps
设置键顺序并使用 KeyValueRenderer
作为 context_class:
OrderedDict
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。