我的日志配置如下:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
},
},
'handlers': {
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/logs/info.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
'request_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/logs/request.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
},
'loggers': {
' ': {
'handlers': ['default'],
'level': 'INFO',
'propagate': True
},
'django.request': { # Stop SQL debug from logging to main logger
'handlers': ['request_handler'],
'level': 'INFO',
'propagate': False
},
}
}
在我看来,我尝试记录以下消息:
import logging
logger = logging.getLogger(__name__)
class IPGroupDeleteView(generics.DestroyAPIView):
queryset = IPGroup.objects.get_queryset()
serializer_class = IPGroupSerializer
def destroy(self, request, *args, **kwargs):
try:
instance = IPGroup.objects.get(id=kwargs['pk'])
except IPGroup.DoesNotExist:
logger.info("instance not found")
return Response(data={"errors": f"IP Group with id {kwargs['pk']} not found"},
status=status.HTTP_404_NOT_FOUND)
在我的 request.log 中,每次 404 发生时都会填充日志,如下所示:
2018-11-15 12:49:44,616 WARNING django.request Not Found: /api/v1/ip-group/190/delete/
2018-11-15 12:49:57,364 WARNING django.request Not Found: /api/v1/ip-group/190/delete/
2018-11-15 12:54:24,947 WARNING django.request Not Found: /api/v1/ip-group/190/delete/
但是,在 info.log 中,我希望看到我的自定义消息,却找不到任何内容。我做错了什么?
最佳答案
您配置的根记录器似乎包含字符串键的空格。尝试使用空字符串:
'': { # Use an empty string
'handlers': ['default'],
'level': 'INFO',
'propagate': True
},
或者,您可以显式设置根记录器:
'root': {
'level': 'INFO',
'handlers': ['default'],
'propagate': True
}
它应该位于 LOGGING
字典的顶层(与 loggers
、handlers
等处于同一级别)。
关于python - Django 未记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320090/