我正在尝试在Django 2.1应用中设置日志记录,但无法显示INFO日志。显示错误和警告,但不显示信息。
我在我的settings.py中添加了一个自定义的LOGGING设置,但它似乎并不影响实际的日志记录。我尝试过更改级别,更改格式程序,打开disable_existing_loggers。我敢肯定,Django只会忽略LOGGING,但是https://docs.djangoproject.com/en/2.1/topics/logging/#configuring-logging以及我所看到的所有地方似乎都表示相反。
做什么?!
详细信息:
我正在用Hericorn在Heroku中运行它,但也通过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的日志记录。我尝试添加以我的项目和应用(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可以更改日志记录设置,但是常规的LOGGING配置在我的settings.py中仍然被忽略。
答案 0 :(得分:1)
因此,看来Django在settings.py
中对LOGGING并没有执行任何操作……您必须自己手动注册LOGGING配置。
AFAICT,这不是应该的样子,但是现实与文档不符。这是我所做的工作:
# To prevent Django from configuring logging itself
LOGGING_CONFIG = None
LOGGING = {
...
}
import logging.config
logging.config.dictConfig(LOGGING)
如果有人知道情况如何或为什么在任何地方都没有提及,我会很感兴趣!
答案 1 :(得分:0)
发现此解决方案很有帮助
LOGGING_CONFIG = None
Logging{...}
import logging.config
logging.config.dictConfig(Logging)
确保遵循语句顺序
来源-https://docs.djangoproject.com/en/3.0/topics/logging/#disabling-logging-configuration