15 votes

Ne pas voir les journaux de Django sur Heroku

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. Savez-vous pourquoi je ne les vois pas ?

2voto

Benjamin Atkin Points 143

での Python-débutant pour un journal qui n'est pas étiqueté. django , ERROR s'affichent dans heroku journaux, mais INFO les journaux ne le font pas.

Pour que cela fonctionne pour les journaux qui ne sont pas étiqueté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 soit similaire à celle de Python-getting-started, y compris le Procfile, cela devrait fonctionner.

Voici un journal qui n'est pas marqué 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')

Quand j'ai essayé 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 du précédent, les journaux d'information et d'erreur se sont affichés. Tout cela avec DEBUG = False (changé par rapport au code dans le dépôt, qui a DEBUG = True ).

Il est probablement préférable, plutôt que d'avoir une clé vide, de sorte que tout soit enregistré, d'avoir une clé plus spécifique. loggers que la chaîne vide ( '' ).

Enfin, dans votre fichier de log, il y a un cas où les logs INFO n'apparaîtront pas sur la console, ou les logs Heroku : Si c'est un journal INFO à django.request avec votre configuration, il n'ira que vers 'mail_admins' porque propagate es False . Je pense que dans ce cas, il serait plus logique que propagate à régler sur True .

1voto

Alper Points 109

J'ai eu la même chose que INFO n'apparaît pas, mais dans mon cas (et comme le rapporte également @Benjamin Atkin) ERROR a fait.

Le problème central semble être que cet appel :

django_heroku.settings(locals())

supprime tous les enregistreurs personnalisés que vous avez pu configurer dans vos LOGGING dict.

La solution est de l'ajouter à l'appel afin de ne pas perturber la configuration de l'enregistrement :

django_heroku.settings(locals(), logging=False)

Ou mieux encore, ne l'utilisez pas du tout, puisque ce paquet est déprécié de toute façon.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X