【发布时间】: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 有这个,它正在工作