Ne pas voir les journaux de Django sur Heroku

14

Je ne vois pas d'entrées de journal (à un niveau de INFO) faites par Django dans mes journaux Heroku.

Voici ma configuration:

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

J'aimerais voir les entrées du journal dans l'interface Heroku. Une idée pourquoi je ne les vois pas là-bas?

Ram Rachum
la source
Voyez-vous quelque chose si vous venez de printquelque chose stdout?
anatoly techtonik
Cela fait deux ans;)
Ram Rachum
3
J'ai trouvé qu'il est toujours sans réponse. =)
anatoly techtonik
1
@RamRachum Si le problème est résolu, écrivez une réponse ou fermez-le d'une manière ou d'une autre - sinon il continuera à apparaître sur le radar des gens.
Mike Fiedler

Réponses:

1

Dans l'application python-getting-started , pour un journal qui n'est pas balisé django, les ERRORjournaux de niveau s'affichent dans les herokujournaux, mais pas les INFOjournaux.

Pour le faire fonctionner pour les journaux qui ne sont pas balisés django, il a besoin d'une configuration comme la suivante (similaire à la vôtre):

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

Donc, si vous ajustez votre configuration pour qu'elle ressemble à python-getting-started, y compris le Procfile, cela devrait fonctionner.

Voici un journal qui n'est pas étiqueté django, que j'ai ajouté à 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')

Lorsque je l'ai essayé pour la première fois, seul le journal des erreurs s'est affiché. Lorsque j'ai ajouté la configuration de journalisation dans l'extrait de code au-dessus de la précédente, les informations et les journaux d'erreurs sont apparus. C'est tout avec DEBUG = False(changé du code dans le repo, qui a DEBUG = True).

Il est probablement préférable, plutôt que d'avoir la clé de chaîne vide, que tout soit consigné, pour avoir des loggersentrées plus spécifiques que la chaîne vide ( '').

Enfin, dans votre fichier journal, il y a un cas où les journaux INFO n'apparaissent sur la console, ou les journaux Heroku: Si c'est un journal INFO pour django.request, avec votre config il ne sera à 'mail_admins'cause propagateest False. Je pense que dans ce cas, il serait plus logique propagated'être réglé sur True.

Benjamin Atkin
la source