【问题标题】:why does my logger not inherit handlers from root logger为什么我的记录器不从根记录器继承处理程序
【发布时间】:2020-10-30 11:58:01
【问题描述】:

我已遵循 django 文档 (https://docs.djangoproject.com/en/3.1/topics/logging/#examples) 的建议以及有关如何在 django 项目中配置日志的其他 SO 问题。

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '%(asctime)s.%(msecs)03d [%(levelname)s:%(name)s:%(lineno)d] %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
            'level': 'INFO',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO',
    },
}

portfolio/models.py:

logger = logging.getLogger(__name__)

def testfunc():
    print(logger)
    print(logger.handlers)

当我运行testfunc 时,我得到以下输出:

>>> testfunc()
<Logger portfolio.models (INFO)>
[]

但是,如果我像这样将记录器显式添加到我的配置中:

'root': {
    'handlers': ['console'],
    'level': 'INFO',
},
'loggers': {
    'portfolio.models': {
        'handlers': ['console'],
        'level': 'INFO',
    },
}

然后处理程序被记录器拾取:

>>> testfunc()
<Logger portfolio.models (INFO)>
[<StreamHandler <stderr> (INFO)>]

我也尝试过创建一个“包罗万象”的记录器,例如基于另一个 SO 答案:

'loggers': {
    '': {
        'handlers': ['console'],
        'level': 'INFO',
    },
}

但这不起作用。

任何想法为什么我不能让我的记录器从根记录器继承?

编辑我无法显示 level 是从根记录器继承的,但无论出于何种原因,处理程序仍未被继承

【问题讨论】:

  • 好像您没有名为 portfolio.models 的记录器
  • 我认为通过在 settings.py 中创建根记录器,我可以使用 logging.getLogger(__name__) 在每个模型中实例化我的记录器,它们将从根记录器 docs.djangoproject.com/en/3.1/topics/logging/#examples 继承
  • 我在my settings 有这个,它正在工作

标签: python django logging


【解决方案1】:

记录器实际上并不“继承”根记录器处理程序。它们将日志传播到根处理程序。因此,从功能上讲,就好像那些处理程序也附加到您的记录器一样,但是如果您想查看它们,您必须直接在根记录器上进行检查。如果您将 logger.warning('also handled by root handlers') 之类的内容放入您的 testfunc() 中,您可以看到此效果。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2018-05-11
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2011-01-06
    相关资源
    最近更新 更多