Não vendo os logs do Django no Heroku

13

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

Esta é 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 porque eu não estou vendo eles lá?

    
por Ram Rachum 11.08.2014 / 21:27

1 resposta

1

No aplicativo python-getting-started , para um log que não está marcado como django , ERROR logs de nível aparecem em heroku logs, mas INFO logs não.

Para fazer com que funcione para os registros que não foram marcados com 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 ser semelhante ao python-getting-started, incluindo o Procfile, esperamos que funcione.

Aqui está um log que não está marcado como django, que 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, a informação e os logs de erro apareceram. Isso é tudo com DEBUG = False (alterado do código no repo, que tem DEBUG = True ).

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

Finalmente, em seu arquivo de log, há um caso em que os logs INFO não aparecerão no console ou os logs do Heroku: se for um log INFO para django.request , com sua configuração, ele irá para 'mail_admins' porque propagate é False . Acho que nesse caso, faria mais sentido que propagate fosse definido como True .

    
por 09.01.2018 / 10:45