所以我的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,
不确定它们是否有任何相关性。但是之前我一直在努力让错误出现在两个文件中,直到我改变了引入它们的顺序,这些东西神奇地改变了东西 - 我真的不明白为什么那会有所作为。)
如果有人可以帮助我,真的很感激......可能很简单,但我必须承认我并不真正理解它是如何运作的。
答案 0 :(得分:1)
您有两个不同的记录器,名为''
(根记录器)和'auth'
。您的两个陈述出现的顺序:
logger = logging.getLogger('')
logger = logging.getLogger('auth')
当你打电话时,显然会有所不同
logger.info(...)
在两种情况下,您将在两个不同的记录器上调用该方法。您可能希望将代码更改为
root_logger = logging.getLogger('')
logger = logging.getLogger('auth')
然后根据需要在root_logger
或logger
上调用方法。