Django记录器在级别之间混合:错误和信息

问题描述 投票:1回答:1

我正在尝试将记录添加到我的django项目这里是我的记录器配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
        },
    },
    'handlers': {
        'default': {
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'debug.log']),
            'formatter': 'standard',
        },
        'apps_errors': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'apps_errors.log']),
            'formatter': 'standard',
        },
        'dev_logger': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'apps_logs.log']),
            'formatter': 'standard',
        },
    },
    'loggers': {
        '': {
            'handlers': ['default'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'gui': {
            'handlers': ['dev_logger', 'apps_errors'],
            'propagate': True,
        },
        'crawler': {
            'handlers': ['dev_logger', 'apps_errors'],
            'propagate': True,
        },
    },
}

如你所见,我想将所有内容记录到debug.log 并将apps(crawler和gui)上的错误记录到apps_errors.log 并将应用程序(crawler和gui)上的信息记录到apps_logs.log

debug.log和apps_errors.log工作正常,一切都记录到debug.log,只有我的2个应用程序中的错误被记录到apps_errors.log,但是当涉及到apps_logs.log时,我一直得到错误和信息,它应该只是信息

当我想记录我正在做的事情的时候

import logging
logger = logging.getLogger(__name__)

我正在做的信息:logging.info(my_info)

我正在做的错误:logging.exception(my_exception)我也试过logging.error(my_exception)

PS: 我已经尝试定义两个记录器,每个处理程序一个,但这样做只使用错误记录器/处理程序记录错误,信息一个不起作用

'gui': {
        'handlers': ['dev_logger'],
        'level': 'INFO',
        'propagate': True,
},
'gui': {
        'handlers': ['apps_errors'],
        'level': 'ERROR',
        'propagate': True,
python django logging django-settings django-logging
1个回答
1
投票

如果出于某种原因,您只希望INFO消息显示在处理程序的输出中,但没有更高的严重性,则需要将过滤器附加到该处理程序。这不是常见的要求 - 尽管在日志中隔离错误和更多错误是常见的,但仅隔离INFO消息并不常见。使用过滤器应该工作:

import logging

class InfoFilter(logging.Filter):
    def filter(self, record):
        return record.level == logging.INFO

然后将该过滤器分配给处理程序dev_logger。不知道为什么你称它为dev_logger - 也许你需要检查你对记录器和处理程序的理解。 advanced tutorial的顶部给出了总结。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.