【问题标题】:Django log messages not processing correctly. Messages to multiple filesDjango 日志消息未正确处理。多个文件的消息
【发布时间】:2013-08-31 17:15:09
【问题描述】:

所以我的 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(message)。 如果我将其更改为 logger.critical(message),则该消息会出现在两个日志文件中,但如果它仍然是 logger.info,则什么都不会发生。

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

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

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

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

【问题讨论】:

  • Python logger 是一个 Singleton,看看这个:stackoverflow.com/questions/18117547/…
  • 抱歉,我不确定这有什么帮助。我打电话给两个不同的记录器对吗? logger = logging.getLogger('') 和 logger=logging.getLogger('auth')....哦,我明白了...我刚刚用第二个覆盖了第一个?所以我应该称它们为 logger1 和 logger2,或者至少给它们起不同的名字?

标签: python django logging


【解决方案1】:

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

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

当你打电话时显然会有所作为

logger.info(...)

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

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

然后酌情调用root_loggerlogger 上的方法。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多