如果在 django rest 框架中发生 500 错误,如何记录每个请求和响应?
How to log every request and response if 500 error occurs in django rest framework?
我将 django 用于 rest 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 错误也很少。
这些导致环境 "Degrade".
我检查了我的日志文件,但它有这样的错误。
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 错误的请求和响应?
这样我就可以调试并找出导致问题的输入和客户端并解决它们。
您可以编写一个中间件来捕获所有未捕获的异常和 return 适当的响应,或者按照 here in DRF docs
所述实现自定义异常处理
我将 django 用于 rest 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 错误也很少。 这些导致环境 "Degrade".
我检查了我的日志文件,但它有这样的错误。
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 错误的请求和响应?
这样我就可以调试并找出导致问题的输入和客户端并解决它们。
您可以编写一个中间件来捕获所有未捕获的异常和 return 适当的响应,或者按照 here in DRF docs
所述实现自定义异常处理