Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:在RESTAPI中记录来自引发异常的消息_Python_Django_Logging_Django Rest Framework - Fatal编程技术网

Python Django:在RESTAPI中记录来自引发异常的消息

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': {

我将Django REST框架用于一个简单的API。我有以下自定义异常,它将DRF的APIException子类化为
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,这些错误是已知的,但是如果一个函数可以抛出多个异常,但有不同的消息,如何通过查看日志知道捕获了哪一个异常?如果异常已经知道捕获了哪种类型的错误,那么手动记录所有内容似乎有点乏味。我想我希望有一个更简单的解决方案,而不是在日志和响应之间复制结果。你刚才说自己做,消息是不同的,因此响应消息也会不同,从那里你可以找到哪一个被捕获。如果我可以问一下,当您想知道哪个异常被抛出到哪里时,您正在考虑哪种情况?通常,您会收到客户端收到的响应消息,如果需要,它将指导您进行调试