在Heroku上看不到Django日志


14

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界面中查看日志条目。知道为什么我在那里看不到他们吗?


如果您只是print想做什么,您会看到任何东西stdout吗?
anatoly techtonik

已经两年了;)
Ram Rachum

3
我发现它仍然没有答案。=)
anatoly techtonik

1
@RamRachum如果解决了,请写一个答案,或以某种方式关闭它-否则它将继续在人们的视野中弹出。
Mike Fiedler

Answers:


1

python-getting-started应用程序中,对于未标记的日志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(已从仓库中的代码更改为DEBUG = True)一起使用。

最好不要有空字符串键,而是记录所有内容,以拥有loggers比空字符串('')更具体的条目。

最后,在你的日志文件,还有的地方INFO日志将不会出现在控制台上的情况下,或Heroku的日志:如果它是一个信息日志django.request,与你的配置它只会去'mail_admins',因为propagateFalse。我认为在这种情况下,将propagate设置为会更有意义True

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.