简洁的方法来改变django控制台日志级别

时间:2013-07-19 16:59:24

标签: django logging

我只想在设置文件中覆盖控制台日志级别。我读了django logging document,但我无法让日志记录做我想做的事。文档向我保证:

“从Django 1.5开始,项目的日志配置与Django的默认值合并,因此您可以决定是要添加还是替换现有配置。要完全覆盖默认配置,请将disable_existing_loggers键设置为True in LOGGING dictConfig。或者你可以重新定义部分或全部记录器。“

所以我尝试将以下内容添加到我的settings.py:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level': 'DEBUG',
        },
    },
}

...但我得到一个例外:

<snip>
  File "/usr/lib/python2.7/logging/config.py", line 575, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'console': 'NoneType' object has no attribute 'split'

足够公平。它似乎想要整个配置块。所以我尝试了我认为最简单的控制台记录器配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'default': {
            'handlers': ['console'],
            'level': 'INFO',
            'filters': []
        }
    }
}

我的目的是将日志级别设置为INFO,但我仍然看到一堆DEBUG消息,并且字符串MYFORMATTER无论如何都没有出现在其中。

最后,在盲目乐观的情况下,我尝试了这个:

from django.utils.log import DEFAULT_LOGGING
DEFAULT_LOGGING['handlers']['console']['level'] = 'INFO'

我必须在这里遗漏一些非常明显的东西。

BTW,我正在使用Django 1.5.1。

3 个答案:

答案 0 :(得分:4)

在这里回答我自己的问题,我最终在settings.py文件中使用了以下内容:

import logging

logging.basicConfig(
    level = logging.INFO,
    format = " %(levelname)s %(name)s: %(message)s",
)

答案 1 :(得分:0)

您可以这样设置django日志记录级别:

import logging
logging.disable(logging.INFO)
  

logging.disable(LVL)

     

为所有记录器提供覆盖级别lvl,优先于   记录器自己的水平。当需要时   在整个应用程序中临时限制日志记录输出,   这个功能很有用。它的作用是禁用所有日志记录   严重性为lvl及以下的调用,以便在使用值调用它时   INFO,然后将丢弃所有INFO和DEBUG事件   那些严重性警告及以上的将按照处理   记录器的有效水平。撤消呼叫的效果   logging.disable(lvl),调用logging.disable(logging.NOTSET)。

http://docs.python.org/2/library/logging.html#logging.disable

答案 2 :(得分:0)

我有类似的问题 - 我错过了我的一位处理人员的“班级”。