我正在尝试使用django.request
记录器记录所有4xx和5xx响应,但这仅在引发异常或urlconf中未匹配URL时才有效。
我的settings.py
如下:
import logging.config
LOGGING_CONFIG = None
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
'logfile': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': "logfile",
'maxBytes': 50000,
'backupCount': 2,
},
},
'loggers': {
'django.request': {
'handlers': ['logfile'],
'level': 'WARNING',
'propagate': True,
}
},
}
logging.config.dictConfig(LOGGING)
如果我有一个返回4xx或5xx状态的视图:
def test500(request):
return HttpResponse("error", status=500)
然后没有记录任何内容。但是,如果我的视图引发了这样的异常,则会正确记录异常:
def testcrash(request):
print 1/0 # server will respond with 500
这是django.request
记录器的预期行为吗?记录我的观点返回的5xx和4xx响应的最佳方法是什么?
答案 0 :(得分:4)
我前段时间遇到过这个问题。以下是发生的事情:
500
错误仅在未捕获异常的结果时才会被记录。如果手动设置500
状态,则不会记录该状态。这是relevant part of the code - 您可以看到该记录发生在handle_uncaught_exception
方法中。
404
响应的行为目前相同 - 仅记录未捕获的Http404
响应。 然而,这在Django 1.10中有所改变。查看我的comment on this ticket:
我只想指出,这种改变改变了Django 404记录的行为。
以前,如果
Http404
异常冒泡到核心处理程序,Django只会记录404(如果视图/中间件捕获异常并返回响应,则不会,而不管该响应是否仍为404 )。现在,它将记录所有404响应,无论它们是如何生成的。这对我来说似乎更好,但可能有些应用程序依赖于之前的行为。
因此,从Django 1.10开始,所有404
响应都将被记录。这对我来说似乎有点不协调。
仅在引发相应的异常时才会记录其他4xx
个响应。 400
个例外情况会记录到django.security
,而不会记录到django.request.
回答你的另一个问题 - 一直记录这些东西的最佳方法是什么? - 我发现最可靠的方法是编写自己的中间件,检查所有响应的状态并进行自己的记录。
编辑:我created a ticket试图解决Django中的一些不一致问题。该问题已在Django 2.1中修复。
答案 1 :(得分:-1)
如果您只需要查看错误并且使用的是apache2.4服务器,可以在/var/log/apache2/error.log找到它
访问日志可在/var/log/apache2/access.log
找到