提问者:小点点

为什么Django日志记录不起作用?


我在使用Django日志时遇到了问题。我已经阅读了Python和Django关于日志记录的文档,但是我仍然不知道我做错了什么。首先,我只是试图在执行以下简单视图时,将一条消息记录到Django开发服务器正在运行的控制台:

# demo/views.py
import logging
logger = logging.getLogger(__name__)

def demo_logging(request, template):
    logger.error("Got some error")
    return render(request, template)

我使用的是Django的默认日志设置,如Django/utils/log中指定的那样。在我的设置文件中使用py,以便我(希望)确切地知道发生了什么(我显然不知道):

# settings.py
DEBUG = True
...
LOGGING_CONFIG = None
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        },
        'null': {
            'class': 'logging.NullHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'django.security': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'py.warnings': {
            'handlers': ['console'],
        },
    }
}
import logging.config
logging.config.dictConfig(LOGGING)

当我执行视图时,除了消息之外,我在控制台中看不到任何东西,

No handlers could be found for logger "demo.views"

我不明白我做错了什么。我想打电话给记录器。错误将击中链接到已定义的控制台处理程序的django记录器。

谢谢

接下来,我通过添加一个默认的“catch all”记录器解决了这个问题,该记录器在使用“\uuuuu name\uuuuuu”参数创建记录器时会触发:

'loggers': {
    '': {
        'handlers': ['console'],
    },
    ...

共1个答案

匿名用户

调用logger=日志记录。getLogger(\uuuu name\uuuuu)使日志记录模块搜索名为您的模块的记录器(demo.views);由于没有使用该名称定义的记录器,因此它将失败。要简单地登录到控制台,您可以使用日志记录配置的'loggers'键中定义的django日志记录程序:

import logging
logger = logging.getLogger('django')

def demo_logging(request, template):
    logger.error("Got some error")
    return render(request, template)