我的Django 1.3日志设置为什么会导致所有消息输出两次?

11
我的 Django 1.3 日志设置导致所有日志消息都会输出两次。我读到过在过去,两次或更多次导入 settings.py 导致了这个问题,但是 Django 1.3 有新的日志功能,我不认为我在任何地方导入了 settings.py 两次。
settings.py 配置:
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s: %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
        },
    },
    'loggers': {
        'custom': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
}

代码:

import logging
log = logging.getLogger('custom')

log.debug('message1')
log.debug('message2')

输出:

DEBUG: message1
DEBUG:custom:message1

感谢您的帮助。

3个回答

13

你尝试过设置 propagate = False 吗?再加上 disable_existing_loggers = True?

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

4
感谢您,'propagate': False 可以在不改变 disable_existing_loggers 的情况下生效。 - mpso
在Django 2.2.8上遇到了相同的问题。 - SACHIN CHAVAN

0

我曾经遇到过同样的问题。我通过将根日志重定向到文件,并将项目日志同时记录到文件和控制台来解决它。

我搜索了我的代码,但无法找到任何 basicConfig() 的存在。我还尝试将 disable_existing_loggers 设置为 True,但没有帮助。最终,我通过设置一个文件记录器来解决了这个问题。我猜这可能是某些情况下的设计问题。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'simple': {
        # exact format is not important, this is the minimum information
        'format': '%(asctime)s %(name)-12s %(lineno)d %(levelname)-8s %(message)s',
    },
},
'handlers': {
    'console': {
        #'level': 'INFO',
        'class': 'logging.StreamHandler',
        'formatter': 'simple',
    },
    # Add Handler for mail_admins for `warning` and above
    'mail_admins': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler',
    },
    'file': {
        #'level': 'INFO',
        'class': 'logging.FileHandler',
        'formatter': 'simple',
        'filename': os.path.join(os.path.dirname(PROJECT_ROOT), 'crawler.admin.log'),
    },

},

'loggers': {
    # root logger
    '': {
        'level': 'INFO',
        'handlers': ['file', 'mail_admins'],
    },
    'scrapy': {
        'level': 'WARNING',
        'handlers': ['console', 'mail_admins'],
        'propagate': False,
    },
    'crawleradmin': {
        'level': 'INFO',
        'handlers': ['console', 'file', 'mail_admins'],
        # required to avoid double logging with root logger
        'propagate': False,
    },
},
}

0

你可能想尝试使用 'disable_existing_loggers': True 吗?


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