python - Django 未记录到文件

标签 python django logging django-rest-framework

我的日志配置如下:

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 字典的顶层(与 loggershandlers 等处于同一级别)。

关于python - Django 未记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320090/

相关文章:

python - 获取 Django 查询集中给定条目之前和之后的条目

Python 连接字节数组

android - 当我使用 HttpPost 向 Django 发送数据时出现 403 FORBIDDEN 消息

django - 如何在表单提交之前将多个图像异步添加到 django 表单中

mysql - 您将如何根据以下数据设计数据库关系......?

logging - Hadoop日志-环境变量的值HADOOP_LOG_DIR?

javascript - 如何在 javascript 中引用像 Bottle 这样的 Web 框架返回的数据?

python - 在 pandas udf pyspark 中使用 numpy

c# - 使用 AddTraceSource 的 dotnet 核心日志记录不起作用

logging - Golang 日志记录策略