Python Django:在RESTAPI中记录来自引发异常的消息
我将Django REST框架用于一个简单的API。我有以下自定义异常,它将DRF的APIException子类化为Python Django:在RESTAPI中记录来自引发异常的消息,python,django,logging,django-rest-framework,Python,Django,Logging,Django Rest Framework,我将Django REST框架用于一个简单的API。我有以下自定义异常,它将DRF的APIException子类化为APIException: class BadRequest(APIException): status_code = 400 default_detail = 'Invalid request' default_code = 'bad_request' 该项目使用以下日志记录设置: LOGGING = { 'handlers': {
APIException
:
class BadRequest(APIException):
status_code = 400
default_detail = 'Invalid request'
default_code = 'bad_request'
该项目使用以下日志记录设置:
LOGGING = {
'handlers': {
'log_to_file': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
}
},
'loggers': {
# "catch all" logger
'': {
'handlers': ['log_to_file'],
'level': 'INFO',
'propagate': True,
},
'django': {
'handlers': ['log_to_file'],
'propagate': False,
'level': 'INFO',
},
}
现在,如果我使用此视图测试异常处理:
@api_view(['GET'])
def hello_world(request):
raise BadRequest('test')
我正确地得到了一个带有{'detail':'test'}
JSON的400响应,但日志文件只包含:
2019-11-19 [django.request] WARNING: Bad Request: /api/v1/hello [in log.py:228]
如何让它在日志文件中显示实际的异常消息(
test
)?请注意,这是我在DEBUG=False
时得到的行为。您确定日志来自引发API错误的请求吗?Django请求调度器不应该从该请求中获取内部服务器错误,因为它是作为400错误请求处理和返回的。此外,dispatcher只记录请求及其状态,而不记录响应消息。APIException类返回正常响应messages@Ken4scholars抱歉,我粘贴了错误的日志消息,它记录了警告:错误请求:/api/v1/hello
而不是错误:内部服务器错误:/api/hello
。将在描述中修复。是的,它只记录响应代码和响应类型,但这告诉我作为应用程序所有者什么都没有。我想知道发生的实际错误(即本例中的test
)。APIException类完全是用来将错误解析为客户端的响应的。如果您想在日志中了解异常的详细信息,您必须手动记录它们或使用现有的解决方案,如sentry等。但基本上,APIExceptions返回的错误消息已经意味着错误原因已知,因此确实不需要将其发送到日志。您通常只向日志发送意外错误,以帮助以后进行调试。@Ken4scholars-True,这些错误是已知的,但是如果一个函数可以抛出多个异常,但有不同的消息,如何通过查看日志知道捕获了哪一个异常?如果异常已经知道捕获了哪种类型的错误,那么手动记录所有内容似乎有点乏味。我想我希望有一个更简单的解决方案,而不是在日志和响应之间复制结果。你刚才说自己做,消息是不同的,因此响应消息也会不同,从那里你可以找到哪一个被捕获。如果我可以问一下,当您想知道哪个异常被抛出到哪里时,您正在考虑哪种情况?通常,您会收到客户端收到的响应消息,如果需要,它将指导您进行调试