INFO
我没有在 Heroku 日志中看到 Django 生成的日志条目(级别为)。
这是我的配置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
'not_development_filter': {
'()': NotDevelopmentFilter,
},
},
'handlers': {
'console':{
'level': 'INFO',
'class': 'logging.StreamHandler',
},
'null': {
'class': 'django.utils.log.NullHandler',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['not_development_filter'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
},
'loggers': {
'': {
'handlers': ['mail_admins', 'console'],
'level': 'INFO',
},
'django': {
'handlers': ['console'],
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'py.warnings': {
'handlers': ['console'],
},
}
}
我想在 Heroku 界面中查看日志条目。知道为什么我在那里看不到它们吗?
答案1
在里面python 入门应用程序,对于未标记的日志django
,ERROR
级别日志会显示在heroku
日志中,但INFO
日志不会显示。
为了使其对未标记的日志起作用django
,它需要如下配置(与您的类似):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'INFO',
},
'django': {
'handlers': ['console'],
'level': 'INFO',
},
},
}
因此,如果您调整配置,使其类似于 python-getting-started,包括 Procfile,它应该能够工作。
这是我添加到的未标记 django 的日志views/hello.py
:
import logging
logger = logging.getLogger(__name__)
# Create your views here.
def index(request):
logger.error('testing logging!')
logger.info('testing info logging')
logger.debug('testing debug logging')
# return HttpResponse('Hello from Python!')
return render(request, 'index.html')
我第一次尝试时,只显示了错误日志。当我在上一个代码片段上方的代码片段中添加日志配置时,信息和错误日志都显示了出来。这都是用DEBUG = False
(从 repo 中的代码更改而来,其中有DEBUG = True
)。
可能比使用空字符串键更好,这样可以记录所有内容,并获得loggers
比空字符串(''
)更具体的条目。
最后,在您的日志文件中,有一种情况是 INFO 日志不会出现在控制台或 Heroku 日志中:如果它是 INFO 日志django.request
,则使用您的配置它只会转到'mail_admins'
因为。我认为在这种情况下,将设置propagate
为False
更有意义。propagate
True
答案2
我也遇到过同样的情况,INFO
级别没有显示出来,但就我的情况而言(@Benjamin Atkin 也报告过),级别确实ERROR
出现了。
核心问题似乎是这个调用:
django_heroku.settings(locals())
删除您可能在字典中设置的所有自定义记录器LOGGING
。
解决方案是将其添加到调用中,以便它不会干扰您的日志设置:
django_heroku.settings(locals(), logging=False)
或者更好的是根本不要使用它,因为这个包已经被弃用了。