我在Django Rest Framework中有UserDetailsView的這段代碼。我正在使用django 1.9和DRF 3.django.request記錄器不適用於get_object_or_404
class UserDetailsView(RetrieveUpdateAPIView):
"""
API endpoint that allows a user to be viewed or edited.
"""
serializer_class = UserDetailsSerializer
permission_classes = (IsAuthenticated,)
def get_object(self):
pk = self.kwargs.get('pk', None)
if not pk or (pk == str(self.request.user.pk)):
return self.request.user
else:
try:
return get_object_or_404(User, id=pk)
except ValueError:
return get_object_or_404(User, username=pk)
我已經根據這些設置配置了我的django記錄器。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '[%(levelname)s] %(message)s'
},
},
'handlers': {
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/backend_common.log',
'maxBytes': 1024*1024*10,
'backupCount': 10,
'formatter': 'simple',
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/backend_requests.log',
'maxBytes': 1024*1024*10,
'backupCount': 10,
'formatter': 'simple',
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
}
},
'loggers': {
'': {
'handlers': ['default'],
'propagate': True,
},
'django.request': {
'handlers': ['request_handler', 'mail_admins'],
'level': 'DEBUG',
'propagate': False,
}
}
}
現在,所有的Django的4xx,5xx錯誤狀態代碼最好能夠登錄到backend_requests.log文件,他們除了404個狀態從get_object_or_404產生。我認爲這個視圖導致的404錯誤也應該被記錄下來。任何幫助,高度讚賞。
'get_object_or_404'不會引發異常。這樣做,它不會寫入日誌。 –
@EdwinLunando你錯了。 'get_object_or_404'確實會引發一個異常:'Http404'。 – RodrigoDela
你提供的日誌配置工作正如我所料......你能否確認你的客戶端實際上是在接收一個HTTP 404響應而不是別的東西(例如403,500)? – solarissmoke