gpt4 book ai didi

Django 自定义错误处理

转载 作者:行者123 更新时间:2023-12-02 04:44:36 25 4
gpt4 key购买 nike

为了实现更好的错误跟踪,我想为任何意外错误生成一个自定义 ID,并将其公开给 API 调用者。为此,我编写了一个自定义的 ErrorMixin(其中 graylogger 是一个记录器,它通过 ip 将日志数据作为 json 发送到日志服务器):

class UnknownError(APIException):
status_code = 500


class ErrorMixin(object):

def dispatch(self, *args, **kwargs):
try:
return super(ErrorMixin, self).dispatch(*args, **kwargs)

except APIException as e:
# catches known errors
raise e

except Exception as e:
uuid = get_uuid()
graylogger.error("{uid: {}, traceback: {} }".format(uuid, traceback.extract_stack())
raise UnknownError(detail=uuid)

问题是:Django 以某种方式在我之前捕获了错误:

我的期望:

{"uid": "123-123-123-123": "msg": "... stacktrace ... "}

我得到的是:

非 Debug模式下的默认 django 500 页面和 Debug模式下的 django stacktrace 页面。

你能解释一下吗,为什么?

最佳答案

解决方法是:重写handle_exception方法,方法如下:

class ErrorMixin(object):

def handle_exception(self, e):
if isinstance(e, APIException):
return super(ErrorMixin, self).handle_exception(e)

else:
uuid = get_uuid()
return super(ErrorMixin, self).handle_exception(
UnknownError(detail=uuid))

关于Django 自定义错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268914/

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