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

时间:2018-12-30 08:18:25

标签: django nginx logging gunicorn

我是登录的新手。我在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,
        },
    },
}

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

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

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

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

此外,最好配置一个根记录器,该记录器充当“追赶者”,以记录与显式记录器不匹配的所有消息。您可以将root记录程序设置为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,
        },
        '': {  # Catchall root logger
            'handlers': ['file'],
            'level': 'ERROR',
        },
    },
}