在Python日志中格式化消息



我想了解是否有可能以及如何使用Python日志模块修改日志消息的消息部分。

基本上,您可以将完整的日志格式化为:

format = '{"timestamp": "%(asctime)s", "logger_level": "%(levelname)s", "log_message": %(message)s}'

然而,我想确保消息部分始终是json格式。是否有任何方法可以修改仅消息部分的格式,也许使用自定义logging.Formatter?

谢谢。

格式规范%(message)s告诉Python你想要格式化字符串。用%(message)r试试,它应该能完成工作:

>>> logging.error('{"log_message": %r}', {"a": 55})
ERROR:root:{"log_message": {'a': 55}}

在Logging Cookbook中有一个示例,它展示了一种方法。基本上:

import json
import logging
class StructuredMessage:
def __init__(self, message, /, **kwargs):
self.message = message
self.kwargs = kwargs
def __str__(self):
return '%s >>> %s' % (self.message, json.dumps(self.kwargs))
_ = StructuredMessage   # optional, to improve readability
logging.basicConfig(level=logging.INFO, format='%(message)s')
logging.info(_('message 1', foo='bar', bar='baz', num=123, fnum=123.456))

当然,你可以调整这个基本的想法来做一些更接近你想要/需要的事情。

更新:只有在实际输出消息时才会进行格式化。此外,它也不适用于第三方库的日志记录。在导入import logging的任何其他模块之前,您需要子类化Logger来实现这一点,但这是一个有文档的方法。

最新更新