为什么此日志记录配置不会打印到stdout?

时间:2012-02-21 04:23:04

标签: python django

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'simple': {
        'format': '%(levelname)s %(message)s'
    }
},
'handlers': {
    'console': {
        'level':'DEBUG',
        'class':'logging.StreamHandler',
        'strm': sys.stdout,
        'formatter':'simple'
    },
},
'loggers': {
    'django': {
        'handlers':['console'],
        'propagate': True,
        'level':'INFO',
    }, 
    #'django.request': {
    #    'handlers': ['console'],
    #    'level': 'ERROR',
    #    'propagate': True,
    #},
},
}

尝试了记录器,活动和注释掉的记录器(以及许多其他记录器)。 运行

python manage.py runserver 0.0.0.0:8080

然而,在我的控制台打印的500错误上没有任何痕迹,只是:

[21/Feb/2012 04:21:10] "POST /some/path/function/ HTTP/1.1" 500 105627

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您需要指定filters

'loggers': {
    'django': {
        'handlers':['console'],
        'filters': [],             # <-- this line
        'propagate': True,
        'level':'INFO',
    },
},

我不知道为什么。

答案 1 :(得分:2)

记录器级别对处理程序级别具有更高的优先级, logging.DEBUG的值为10,logging.INFO的值为20.

'handlers': {
    'console': {
        'level':'DEBUG',
    },
}

'loggers': {
        'level':'INFO',
    }

因此,您的日志记录始终设置为记录器优先级的INFO级别,并且不会使用DEBUG输出。

这就是我认为的问题。

答案 2 :(得分:0)

我花了一些时间来挖掘,但这是因为:

https://docs.djangoproject.com/en/dev/releases/1.4/#request-exceptions-are-now-always-logged

这很令人困惑,应该在日志文档中突出显示,而不是。