Não vendo o Django logar no Heroku


14

Não estou vendo entradas de log (no nível de INFO) feitas pelo Django em meus logs do Heroku.

Esta é a minha configuração:

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'],
        },
    }
}

Eu gostaria de ver as entradas de log na interface Heroku. Alguma idéia de por que não os vejo lá?


Você vê alguma coisa se quiser printalgo stdout?
— Anatoly techtonik

Já faz dois anos;)
— Ram Rachum 10/10

3
Eu achei que ainda está sem resposta. =)
— anatoly techtonik 10/10

1
@RamRachum Se estiver resolvido, escreva uma resposta ou feche-a de alguma forma - caso contrário, continuará aparecendo no radar das pessoas.
— Mike Fiedler

Respostas:


1

No aplicativo de introdução ao python , para um log que não está marcado django, os ERRORlogs de nível são exibidos nos herokulogs, mas os INFOlogs não.

Para fazê-lo funcionar para logs que não são marcados django, ele precisa de uma configuração como a seguinte (semelhante à sua):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Portanto, se você ajustar sua configuração para que ela seja como a introdução ao python, incluindo o Procfile, esperamos que funcione.

Aqui está um log que não está marcado como django, que eu adicionei a 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')

Quando tentei pela primeira vez, apenas o log de erros apareceu. Quando adicionei a configuração de log no snippet de código acima do anterior, as informações e os logs de erro apareceram. Isso é tudo com DEBUG = False(alterado do código no repo, que possui DEBUG = True).

Provavelmente é melhor, em vez de ter a chave de cadeia vazia, para que tudo seja registrado, para ter loggersentradas mais específicas do que apenas a cadeia vazia ( '').

Finalmente, no seu arquivo de log, há um caso em que os registros INFO não aparecem no console ou o Heroku: Se for um registro INFO django.request, com a sua configuração, ele irá somente 'mail_admins'porque propagateé False. Eu acho que, nesse caso, faria mais sentido propagateser definido como True.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.