为特定API定制Django日志过滤器



在我的应用程序中,有一个名为"UserChangeWorkScheduleViewSet"的API,其uri为"host/API/v1/workSchedule"。以下是"workschedule.py"中的UserChangeWorkScheduleViewSet:

class UserChangeWorkScheduleViewSet(viewsets.ModelViewSet):
queryset = UserChangeWorkSchedule.objects.all()
serializer_class = UserChangeWorkScheduleSerializer
permission_classes = (IsAuthenticated,)
def create(self, request, *args, **kwargs):
UserChangeWorkSchedule.objects.filter(user=request.user.id).update(status=0)
is_many = isinstance(request.data, list)
if not is_many:
request.data['user'] = request.user.id
return super().create(request)
else:
for data in request.data:
data['user'] = request.user.id
serializer = self.get_serializer(data=request.data, many=True)
if serializer.is_valid(raise_exception=True):
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
else:
print('UserChangeWorkScheduleViewSet', request.user.id, serializer.errors)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这是我的客户.py:

import logging
class UserChangeWorkScheduleViewSet400(logging.Filter):
def filter(self, record):
record.levelname == 400
record.filename == "workschedule.py"
return True

这是设置中的日志记录

from api import customlog
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
},
'only_400_from_workschedule': {
'()': customlog.UserChangeWorkScheduleViewSet400
},
},
'formatters': {
'simple_trace': {
'format': '%(asctime)s %(levelname)s %(filename)s %(funcName)s %(message)s',
}
},
'handlers': {
'telegram': {
'class': 'telegram_handler.TelegramHandler',
'token': '1489551033:AAHbIvspcVR5zcslrbrJ9qNK2yZ1at0yIMA',
'chat_id': '-429967971',
'formatter': 'simple_trace',
}
},
'loggers': {
'django.request': {
'handlers': ['telegram'],
'level': 'ERROR',
'propagate': True,
},
},
}

我故意发送了一个糟糕的请求来筹集400英镑,而400英镑是这样显示的:[![在此输入图像描述][1]][1]

然而,我仍然没有收到Telegram日志。Telegram日志可以很好地处理其他错误,例如500。

重要提示:此记录器必须记录workschedule.py中的其他500错误以及400错误。如果该设置只记录workschedule.py的400,则日志记录将没有用处。[1] :https://i.stack.imgur.com/eedI7.png

您尝试过authentication_classes吗?

https://www.django-rest-framework.org/api-guide/views/#authentication_classes

最新更新