【问题标题】:Django not logging to fileDjango没有记录到文件
【发布时间】:2019-04-18 14:14:27
【问题描述】:

我的 Logging 配置如下:

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 中,我希望在其中看到我的自定义消息,但没有找到任何内容。我做错了什么?

【问题讨论】:

    标签: python django logging django-rest-framework


    【解决方案1】:

    您配置的根记录器似乎包含字符串键的空格。尝试一个空字符串:

    '': {  # Use an empty string
        'handlers': ['default'],
        'level': 'INFO',
        'propagate': True
    },
    

    或者,您可以显式设置根记录器:

    'root': {
        'level': 'INFO',
        'handlers': ['default'],
        'propagate': True
    }
    

    这应该位于LOGGING dict 的顶层(与loggershandlers 等处于同一级别)。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多