在 Heroku 上看不到 Django 日志

在 Heroku 上看不到 Django 日志

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 入门应用程序,对于未标记的日志djangoERROR级别日志会显示在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'因为。我认为在这种情况下,将设置propagateFalse更有意义。propagateTrue

答案2

我也遇到过同样的情况,INFO级别没有显示出来,但就我的情况而言(@Benjamin Atkin 也报告过),级别确实ERROR出现了。

核心问题似乎是这个调用:

django_heroku.settings(locals())

删除您可能在字典中设置的所有自定义记录器LOGGING

解决方案是将其添加到调用中,以便它不会干扰您的日志设置:

django_heroku.settings(locals(), logging=False)

或者更好的是根本不要使用它,因为这个包已经被弃用了。

相关内容