Python Django logger在两个级别之间混合:错误和信息

Python Django logger在两个级别之间混合:错误和信息,python,django,logging,django-settings,django-logging,Python,Django,Logging,Django Settings,Django Logging,我正在尝试将日志添加到django项目中 以下是我的记录器配置: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s', }, }, 'handlers

我正在尝试将日志添加到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

并将应用程序(爬虫程序和gui)上的错误记录到应用程序错误。日志
并将应用程序(爬虫程序和gui)上的信息记录到应用程序日志中。日志

debug.log和apps_errors.log工作正常,所有内容都被记录到了
debug.log
,只有我的两个应用中的错误被记录到了
apps_errors.log
,但是当涉及到
apps_logs.log时,我一直在获取错误和信息,而这应该只是信息

顺便说一下,当我想记录我正在做的事情时

import logging
logger = logging.getLogger(__name__)
关于我正在做的信息:
logging.info(我的信息)

对于我正在执行的错误:
logging.exception(我的异常)
我也尝试了
logging.error(我的异常)

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

'gui': {
        'handlers': ['dev_logger'],
        'level': 'INFO',
        'propagate': True,
},
'gui': {
        'handlers': ['apps_errors'],
        'level': 'ERROR',
        'propagate': True,
如果出于某种原因,您只希望信息消息显示在处理程序的输出中,但没有更高的严重性,那么您需要将筛选器附加到该处理程序。这不是一个常见的要求-虽然隔离日志中的错误和更大的错误是常见的,但仅隔离信息消息并不常见。使用过滤器应该可以:

import logging

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

然后将该筛选器分配给处理程序
dev\u logger
。不确定为什么称之为“dev_logger”
——也许您需要回顾一下对记录器和处理程序的理解。列表顶部给出了摘要。

为处理程序提供的级别是正在记录的最低级别。这意味着
INFO
既包括
警告
也包括
错误
。如果您不想在应用程序日志中记录错误,则必须使用仅由错误处理程序处理的其他记录器来记录错误。@schwobaseggl如下所示:pastebin.com/ZrPwpH0V????我已经试过了,只有错误处理程序有效,信息处理程序无效。。。。。有什么想法吗?那不行。在您的模块中,执行诸如
logger=logging.getLogger(\uu name\uuuuu)
error\u logger=logging.getLogger()
之类的操作,并仅使用后者来记录错误。@schwobasegg我应该执行例如error\u logger=logging.getLogger('error\u logger'),并创建一个名为error\u logger???的记录器吗?这是一个选项,但它扭曲了这个概念。毕竟,你的应用程序日志应该显示你的应用程序中发生了什么。那么,为什么要让它记录常见的东西,而不是重要的东西呢?我称它为dev_logger,因为我将只为开发人员使用logger.info()。。该文件将仅由开发人员访问。。。有什么问题吗?您可以随意调用它,但它是您正在配置的处理程序,而不是记录器。注意,它在一本字典中,有一个键“handlers”…啊,好吧,我明白你的意思了。。你说得对。。。我对伐木很陌生。