【问题标题】:How to log every request and response if 500 error occurs in django rest framework?如果 django rest 框架中出现 500 错误,如何记录每个请求和响应?
【发布时间】:2020-03-19 23:26:50
【问题描述】:

我将 django 用于其他 API。

我在 settings.py 中有一个日志记录代码。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(asctime)s %(levelname)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(asctime)s %(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': '/tmp/OAuthLog_Production.log',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'oauth': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': True,
        }
    },
}

在 views.py 中,只要发生任何异常,它就会像这样使用。

import logging
logger = logging.getLogger("oauth")
      except Exception as ex:
            logger.exception(ex)
            response = helper.generateStandardResponse(ResponseCodes.exception_in_finding_user,
                                                       "Exception in finding user", data, False);
            logger.info("get_profile_details : Exception in finding user")
            return Response(response, status=status.HTTP_200_OK)

因为,我使用 Elastic beanstalk 来托管我没有返回 500 状态代码的应用程序。 我正在返回自定义响应。

即使在此之后,应用程序返回的 500 错误也很少。 而那些正在导致环境“降级”

我检查了我的日志文件,但它有这样的错误。

2019-11-23 23:53:10,600 ERROR UserProfile matching query does not exist.
Traceback (most recent call last):
  File "/opt/python/current/app/profiles/views.py", line 514, in get_profile_details
    user_profile_detail = UserProfile.objects.get(mobile1=mobile, account_type=account_type)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/django/db/models/query.py", line 385, in get
    self.model._meta.object_name
profiles.models.DoesNotExist: UserProfile matching query does not exist.

我无法理解为什么会有 500 个错误?

如何记录导致 500 错误的每个请求和响应?

这样我就可以调试并找出导致问题的输入和客户端并解决它们。

【问题讨论】:

    标签: django logging error-handling django-rest-framework django-logging


    【解决方案1】:

    您可以编写一个中间件来捕获所有未捕获的异常并返回适当的响应,或者按照here in DRF docs 的描述实现自定义异常处理

    【讨论】:

    • 文档没有提到如何记录请求和响应。你能分享一些例子吗?
    • @AmolChakane 我不确定你的意思,但如果你说的是我在文档中链接页面的第二个选项,那么响应会在自定义处理程序中获取,你可以记录它随便你。至于请求,您最初的问题没有提及,但如果您想记录它,请使用中间件选项,因为它同时处理请求和响应
    • 我最初的问题提到了日志记录请求。我能够使用自定义异常处理程序记录请求。非常感谢!
    • 哦,我刚刚注意到您的问题也提到了请求。我很高兴你能够解决它。祝你好运!
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2023-03-21
    • 2020-03-13
    • 2020-03-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多