Django:如何将日志级别设置为INFO或DEBUG

kev*_*kev 13 python django logging configuration-files

我试图在Django中将调试级别更改为DEBUG,因为我想在我的代码中添加一些调试消息.它似乎没有效果.

我的日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'django.request':{
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

码:

import logging ; logger = logging.getLogger(__name__)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
logger.warn("THIS ONE IS")
Run Code Online (Sandbox Code Playgroud)

控制台上的输出:

WARNING:core.handlers:THIS ONE IS
Run Code Online (Sandbox Code Playgroud)

我也尝试在我的设置文件中设置DEBUG = False和DEBUG = True.有任何想法吗?

编辑:如果我直接在记录器上设置日志级别,它可以工作:

import logging ; logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
Run Code Online (Sandbox Code Playgroud)

输出:

DEBUG:core.handlers:THIS MESSAGE IS NOT SHOWN IN THE LOGS
WARNING:core.handlers:THIS ONE IS
Run Code Online (Sandbox Code Playgroud)

但是:似乎配置文件完全被忽略了.即使我将配置中的两个条目都设置回ERROR,它也会始终打印两个语句.这是正确的行为还是我还缺少什么?

Vin*_*jip 10

你需要添加例如

'core.handlers': {
    'level': 'DEBUG',
    'handlers': ['console']
}
Run Code Online (Sandbox Code Playgroud)

django.request条目并行,或

'root': {
    'level': 'DEBUG',
    'handlers': ['console']
}
Run Code Online (Sandbox Code Playgroud)

与'loggers'条目并行.这将确保在您实际使用的记录器上设置级别,而不仅仅是django.request记录器.

更新:要显示所有模块的消息,只是添加条目旁边django.request,包括您的顶层模块,例如api,handlers,core或什么的.既然你还没有准确地说出你的包/模块层次结构是什么,我就不能更具体了.

  • 这样可行.但有没有办法只显示我的调试日志?如果我设置'root'条目,我会在日志记录中获得我不感兴趣的所有sql查询.设置core.handlers会将调试输出限制为core.handlers.但是我希望在我的文件中看到所有的调试输出(所有handlers.py,api.py和我还有什么). (3认同)

小智 5

我通过改变来修复它

LOGGING = {
    ...
}
Run Code Online (Sandbox Code Playgroud)

到:

logging.config.dictConfig({
    ...
})
Run Code Online (Sandbox Code Playgroud)

例如,将所有消息记录到控制台:

import logging.config
LOGGING_CONFIG = None
logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'console': {
            # exact format is not important, this is the minimum information
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console',
        },
    },
    'loggers': {
    # root logger
        '': {
            'level': 'DEBUG',
            'handlers': ['console'],
        },
    },
})
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于 Django 的,你只是在这里绕过了整个 Django 日志系统...... (4认同)