【发布时间】:2019-03-31 13:13:46
【问题描述】:
我正在尝试在我的 Django 2.1 应用程序中设置日志记录,但无法显示 INFO 日志。 ERROR 和 WARNING 显示,但从不显示 INFO。
我在 settings.py 中添加了一个自定义的 LOGGING 集,但它似乎不会影响实际的日志记录。我尝试过更改级别、更改格式化程序、打开 disable_existing_loggers。我很确定 Django 只是忽略了 LOGGING,但 https://docs.djangoproject.com/en/2.1/topics/logging/#configuring-logging 和我所看到的任何地方似乎都表明并非如此。
做什么?!
详情:
我在 Heroku 中使用 gunicorn 运行它,但也通过 python manage.py runserver 运行它,它的作用相同。
在我的 ./api/v1/serializers.py 和 ./users/models.py 我添加了这样的日志记录:
import logging
logger = logging.getLogger(__name__)
...
...
...
logger.info('Test log INFO')
logger.warning('Test log WARNING')
logger.error('Test log ERROR')
我的设置在 ./amp/settings.py 并有这个:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d: %(message)s',
},
'simple': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'INFO',
'formatter': 'verbose',
'filters': [],
},
'file': {
'class': 'logging.FileHandler',
'level': 'DEBUG',
'filename': '/tmp/amp-server/debug.log',
'formatter': 'verbose',
},
},
'loggers': {
'': {
'level': 'INFO',
'propagate': True,
'handlers': ['console', 'file'],
'filters': [],
},
'django.request': {
'level': 'DEBUG',
'propagate': False,
'handlers': ['console'],
},
},
}
没有其他地方可以引用 settings.py 的 LOGGING。我尝试添加以我的项目和应用程序(amp、amp.api、api 等)命名的显式记录器,但无济于事,例如:
'amp': {
'level': 'INFO',
'propagate': True,
'handlers': ['console', 'file'],
'filters': [],
},
后来logger = logging.getLogger('amp'),但这并没有什么不同。我相当肯定 Django 会忽略我的 settings.py LOGGING 或覆盖它。 (在你问之前,我的代码库中没有引用 LOGGING,而是在 settings.py 中引用。)
我仔细梳理了 Django LOGGING 和 Python dictConfig 文档,从博客和 StackOverflow 帖子中复制粘贴并调整了 LOGGING 设置,但没有任何帮助!
注意:这不是 Why Django logging skips log entries? 的重复 - 这些答案试图修复损坏的 LOGGING 值,而不是处理根本没有使用 LOGGING 的事实。 logging.basicConfig 可以更改日志记录设置,但我的 settings.py 中仍然忽略了常规 LOGGING 配置。
【问题讨论】:
-
logger = logging.getLogger('amp')同时配置了'amp'日志应该可以解决问题。 -
@henriquesalvaro:谢谢你的想法。但我已经试过了。设置 'amp' 记录器并显式设置 logging.getLogger('amp') 没有任何区别。它似乎仍然通过默认配置进行管道传输,忽略 INFO 但通过 WARNING 及以上。
-
@solarissmoke:这不是stackoverflow.com/questions/36571284/… 的副本——这些答案试图修复损坏的 LOGGING 值,而不是处理根本没有使用 LOGGING 的事实。其中一个答案提到了 logging.basicConfig,它可以为我更改日志记录设置,但我的 settings.py 中仍然忽略了常规 LOGGING 配置。