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á?

Ram Rachum
fonte
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.

Benjamin Atkin
fonte