gpt4 book ai didi

python - 我可以在一行中/通过日志记录生成 Python 输出异常吗?

转载 作者:太空狗 更新时间:2023-10-29 21:45:08 25 4
gpt4 key购买 nike

我正在使用 AWS 并使用 AWS cloudwatch 查看日志。虽然事情不应该在 AWS 上崩溃,但它们可能会崩溃。我刚好有这样一个案例。然后我搜索了 Traceback 并得到了行

Traceback (most recent call last):

没有实际的回溯。我有一个有效的结构化日志记录设置(请参阅 other question),我想以类似的方式获得回溯。

所以代替:

Traceback (most recent call last):
File "/home/math/Desktop/test.py", line 32, in <module>
adf
NameError: name 'adf' is not defined

有点像

{"message": "Traceback (most recent call last):\n      File \"/home/math/Desktop/test.py\", line 32, in <module>\n        adf\n    NameError: name 'adf' is not defined", "lineno": 35, "pathname": "/home/math/Desktop/test.py"}

或者更好的是还使用 JSON 格式的字符串。

我能想到的实现这一点的唯一方法是一个巨大的 try-except block 。宠物小 Sprite 风格。有更好的解决方案吗?

最佳答案

您可以使用 sys.excepthook .只要您的脚本中发生异常,就会调用它。

import logging
import sys
import traceback

def exception_logging(exctype, value, tb):
"""
Log exception by using the root logger.

Parameters
----------
exctype : type
value : NameError
tb : traceback
"""
write_val = {'exception_type': str(exctype),
'message': str(traceback.format_tb(tb, 10))}
logging.exception(str(write_val))

然后在您的脚本中,您必须覆盖 sys.excepthook 的值。

sys.excepthook = exception_logging

现在,无论何时发生异常,都会使用您的记录器处理程序进行记录。

注意:在运行之前不要忘记设置记录器

关于python - 我可以在一行中/通过日志记录生成 Python 输出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com