Django日志消息未正确处理。消息到多个文件

时间:2013-08-28 14:44:13

标签: python django logging

所以我的Django项目中有两个记录器。一个用于身份验证失败,一个包含那些但也包括用于编辑某些内容的消息(基本上我有一个记录器命令的所有内容)。 我似乎在模块中有一些问题,但我想要使用两个记录器。我的两个记录器目前定义如下:

'': {
    'handlers': ['file'],
    'level': 'INFO',
    'propagate': True,
},
'auth': {
    'handlers': ['file_auth'],
    'level': 'CRITICAL',
    'propagate': True,
}

我的处理程序是:

'file': {
    'level': 'INFO',
    'class': 'logging.FileHandler',
    'filename': '/home/debug.log',
    'formatter': 'simple',
},
'file_auth': {
    'level': 'CRITICAL',
    'class': 'logging.FileHandler',
    'filename': '/home/debug2.log',
    'formatter': 'verbose',
},

在我的Django视图的顶部,我有

import logging
logger = logging.getLogger('')
logger = logging.getLogger('auth')

然后在一个视图中我有一个logger.info(消息)。 如果我将其更改为logger.critical(message),则消息将出现在两个日志文件中,但如果它仍然是logger.info,则根本不会发生任何事情。

(可能无用的信息......在settings.py的LOGGING部分开头,我有:

'version': 1,
'disable_existing_loggers': False,

不确定它们是否有任何相关性。但是之前我一直在努力让错误出现在两个文件中,直到我改变了引入它们的顺序,这些东西神奇地改变了东西 - 我真的不明白为什么那会有所作为。)

如果有人可以帮助我,真的很感激......可能很简单,但我必须承认我并不真正理解它是如何运作的。

1 个答案:

答案 0 :(得分:1)

您有两个不同的记录器,名为''(根记录器)和'auth'。您的两个陈述出现的顺序:

logger = logging.getLogger('')
logger = logging.getLogger('auth')
当你打电话

时,

显然会有所不同

logger.info(...)

在两种情况下,您将在两个不同的记录器上调用该方法。您可能希望将代码更改为

root_logger = logging.getLogger('')
logger = logging.getLogger('auth')

然后根据需要在root_loggerlogger上调用方法。