无法使用日志模块在 Django 中查看日志消息

Unable to see logging messages in django using the logging module

我是日志记录的新手。我在 views.py 文件中添加了用于登录的代码,并根据 settings.py 文件中的 django 文档添加了设置。但是,logging.txt 文件在 DEBUG 级别显示其他异常或在 WARNING 级别没有输出。该网站运行正常,我在 EC2 实例上运行它。

这是我的 views.py 文件中的代码:

import logging

# Get an instance of a logger
logger = logging.getLogger(__name__)

def index(request):
    ...
    logger.error("THIS IS A LOG ERROR!!!")
    logger.warning("THIS IS A LOG WARNING!!!")

    ...
    return render(...)

这是我的 settings.py 文件中的代码:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logging.txt',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

我做错了什么?

您配置的记录器名为 django,它将匹配顶级 django 包下的所有代码 - 本质上是 Django 框架代码。

对于您自己的代码,您需要根据应用的名称配置一个单独的记录器,这将适用于在该应用内的任何模块中使用 logging.getLogger(__name__) 创建的记录器。例如,如果您的应用名为 myapp:

'myapp': {  # Will apply to myapp/views.py, myapp/models.py etc.
    'handlers': ['file'],
    'level': 'DEBUG',
    'propagate': True,
}

此外,最好配置一个根记录器作为 "catch all" 来记录任何与显式记录器不匹配的消息。您可以将根记录器设置为 ERROR,这样您就不会错过任何来自系统任何部分的错误。您使用空字符串作为根记录器的名称。

'': {
    'handlers': ['file'],
    'level': 'ERROR',
}

总之:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logging.txt',
        },
    },
    'loggers': {
        'django': {  # Logger for Django framework code
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'myapp': {  # Specific logger for your app
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        '': {  # Catch-all root logger
            'handlers': ['file'],
            'level': 'ERROR',
        },
    },
}