【发布时间】:2021-03-26 01:26:39
【问题描述】:
我已经查看了很多关于实现此功能的 SO 响应,但我似乎找不到不推荐使用的东西或真正适用于我的用例的东西。
基本上,我有一些返回自己的状态代码的 API 方法。但是,如果出于任何原因出现 500 服务器错误或任何高于 500 的值表明发生了一些奇怪的事情(例如,假设数据库连接超时),我希望将其记录到文件中或通过电子邮件发送给管理员。
我尝试使用自定义异常处理程序,但并非所有 500 个错误都是异常。
所以我求助于编写自定义中间件,看起来像这样
class CustomApiLoggingMiddleware(MiddlewareMixin):
def process_response(self, request, response):
if response.path.startswith('/api/'):
...do stuff here
然而,问题是似乎没有status_code。坦率地说,我真的不知道我实际上得到了哪种回应。由于 API 方法,我的 API 故意返回了 500 响应,如果不满足某种条件(假设他们发送了没有正确标头的请求),则 Django 在后端生成了 500 响应/p>
我试图通过在一些基本的 /500 路由中返回 Response(status=status.HTTP_500) 来故意生成 500 响应/错误。即使这触发了中间件,我也没有可以用来检查响应是否为 500 的 status_code。
我什至不确定我这样做是否正确,但希望你能理解我的意图。我基本上想全面捕获由于我的 API 调用而可能发生的所有未捕获的异常,并将它们记录下来或发送给管理员。大多数返回大约 40X 或任何值的调用都以我想要的方式处理。
【问题讨论】:
-
在这种情况下,我会查看sentry.io,您将获得更好的错误日志,并且它很容易与所有内容集成。不是先令,但已经使用了 5 年或更长时间,没有它就活不下去。我们所有的 dajngo 项目、webapps,甚至一些命令行工具都使用它。轻松值得 30/月。
标签: django exception logging django-rest-framework middleware