Python日志。使用formatter与logging.exception()
我有一个日志格式化工具,它可以把所有常见的日志级别格式化成一个json字符串。当我想查看日志时,我会用一个网页和一些javascript代码,把这个json转换成表格里的内容。
formatter = logging.Formatter(
'{"datetime":"%(asctime)s","level":"%(levelname)s","app":"%(app_name)s","module":"%(module)s",' +
'"line":"%(lineno)d","function":"%(funcName)s","msg":"%(msg)s"}' #<switch2>'
)
这个方法运行得很好。现在我想用logging.exception()来记录异常信息。
看起来,logging.exception并没有提供其他日志级别中常见的那些字典项。
我该如何获取logging.exception提供的堆栈跟踪信息,以便把它转换成我为其他日志条目创建的json格式?我需要的是,把logging.exception的堆栈跟踪信息抓取出来,放到json的“msg”元素里。如果logging.exception没有提供像时间、级别等其他字典元素,我可以自己动态创建这些元素。
1 个回答
3
看起来这个问题和logging.exception不接受'extra'的bug有关(这个问题在2.7和3.2版本中已经修复了)。
作为一种解决方法,可以使用logging.error()
,并传入exc_info=True
这个参数。
顺便提一下,logging.exception()
其实在内部是调用了logging.error()
,引用自cpython 2.7的源代码:
def exception(self, msg, *args, **kwargs):
"""
Convenience method for logging an ERROR with exception information.
"""
kwargs['exc_info'] = True
self.error(msg, *args, **kwargs)
另外,参考一下:
- Python: 使用自定义*kwargs记录异常
- python-logstash-formatter(这里有一个将追踪异常包含到json日志格式化器中的例子)