首页 > 解决方案 > 如何在 Django Rest Framework 中记录 400 个响应的更多详细信息?

问题描述

我有一个用 Django Rest Framework 构建的端点,有人正在向该端点发布数据。从今天早上开始,他收到了很多 400 条回复。在我的 Kibana 日志记录中,我只能确认他确实收到了 400 条回复。我需要调试它,但我没有很多信息。因此,我想记录有关 400 响应的更多详细信息。所以我想在我的视图中执行以下操作

def create(self, request, *args, **kwargs):
    try:
        response = super().create(request, *args, **kwargs)
        return response
    except exceptions.ValidationError as e:
        logger.error(f"{e} in message: {request.data}")
        return Response(e, status=status.HTTP_400_BAD_REQUEST)

这似乎可行,但它并不是最合乎逻辑的方式。有人知道记录 400 个响应的更 Pythonic 方式吗?

标签: pythondjangologgingdjango-rest-frameworkhttp-status-code-400

解决方案


我会检查这个response.status值,它是一个整数,然后我记录response.data它是一个dict类似的对象。

此外,Logstash 非常喜欢 JSON 之类的项目,这可能更适合您的情况。

def create(self, request, *args, **kwargs):
    response = super().create(request, *args, **kwargs)
    if response.status == 400:
        logger.error(response.data)
        
    return response

推荐阅读