为什么此日志配置无法打印到标准输出?

3
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个回答

3
您需要指定过滤器:
'loggers': {
    'django': {
        'handlers':['console'],
        'filters': [],             # <-- this line
        'propagate': True,
        'level':'INFO',
    },
},

我不知道为什么。


我刚刚偶然发现了这个问题。据我所知,如果没有指定过滤器字段,那么在使用mail_admins处理程序时,AFAIK,Django会自动将其设置为['require_debug_false']。通过反复试验和大量思考,我发现了这一点。我不确定这是否是预期行为还是一个错误(Django 1.4.x)。 - Tomáš Plešek
啊,有趣的发现 @TomášPlešek - bradley.ayers

2

日志记录器级别优先于处理器级别,logging.DEBUG 的值为 10,logging.INFO 的值为 20。

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

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

因为记录器的优先级,所以您的日志记录级别始终设置为INFO,因此不会使用DEBUG输出。这就是我认为存在的问题。

1
当然,如果我将记录器级别降至DEBUG,我可以获得DEBUG输出。我不想要debug输出。我想要INFO及以上级别,但实际上我想要的是error。没有ERROR级别的日志记录。 - mkocubinski
logging.ERROR 的值为40,请在 logging 模块中查看。尝试导入 logging。 - avasal

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接