web-dev-qa-db-fra.com

Exemple de journal simple dans un fichier pour Django 1.3+

Les notes de version disent:

Django 1.3 ajoute une prise en charge au niveau du framework pour le module de journalisation de Python.

C'est bien. J'aimerais en profiter. Malheureusement la documentation ne me donne pas tout sur un plateau d'argent sous la forme d'un exemple de code de travail complet qui montre à quel point c'est simple et précieux.

Comment configurer cette nouvelle fonctionnalité géniale pour que je puisse poivrer mon code avec

logging.debug('really awesome stuff dude: %s' % somevar)

et voir le fichier "/tmp/application.log" se remplir de

18:31:59 Apr 21 2011 awesome stuff dude: foobar
18:32:00 Apr 21 2011 awesome stuff dude: foobar
18:32:01 Apr 21 2011 awesome stuff dude: foobar

Quelle est la différence entre la journalisation par défaut Python et ce "support au niveau du framework"?

95
John Mee

J'adore vraiment ceci, voici votre exemple de travail! Sérieusement, c'est génial!

Commencez par mettre ceci dans votre settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'Django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': SITE_ROOT + "/logfile",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'Django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'Django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'MYAPP': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    }
}

Maintenant, qu'est-ce que tout cela signifie?

  1. Formateurs J'aime que ça sorte comme le même style que ./manage.py runserver
  2. Gestionnaires - Je veux deux journaux - un fichier texte de débogage et une console d'informations. Cela me permet vraiment de creuser (si nécessaire) et de regarder un fichier texte pour voir ce qui se passe sous le capot.
  3. Enregistreurs - Voici où nous clouons ce que nous voulons enregistrer. En général Django obtient WARN et au-dessus - l'exception (donc se propage) est le back-end où j'aime voir les appels SQL car ils peuvent devenir fous. La dernière est mon application si j'ai deux gestionnaires et poussez-y tout.

Maintenant, comment puis-je activer MYAPP pour l'utiliser ...

Par le documentation mettez cela en haut de vos fichiers (views.py) ..

import logging
log = logging.getLogger(__name__)

Ensuite, pour sortir quelque chose, faites ceci.

log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")

Les niveaux de log sont expliqués ici et pour pur python ici .

180
rh0dium

Basé en partie sur la configuration de la journalisation suggérée par rh0dium et quelques recherches supplémentaires Je l'ai fait moi-même, j'ai commencé à assembler un exemple Django projet avec des valeurs par défaut de journalisation Nice - échec -nicely-Django .

Exemple de sortie du fichier journal:

2016-04-05 22:12:32,984 [Thread-1    ] [INFO ] [djangoproject.logger]  This is a manually logged INFO string.
2016-04-05 22:12:32,984 [Thread-1    ] [DEBUG] [djangoproject.logger]  This is a manually logged DEBUG string.
2016-04-05 22:12:32,984 [Thread-1    ] [ERROR] [Django.request      ]  Internal Server Error: /
Traceback (most recent call last):
  File "/Users/Kermit/.virtualenvs/fail-nicely-Django/lib/python3.5/site-packages/Django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/Kermit/.virtualenvs/fail-nicely-Django/lib/python3.5/site-packages/Django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/Kermit/projekti/git/fail-nicely-Django/djangoproject/brokenapp/views.py", line 12, in brokenview
    raise Exception('This is an exception raised in a view.')
Exception: This is an exception raised in a view.

L'utilisation détaillée est expliquée dans le readme , mais essentiellement, vous copiez le module logger dans votre Django projetez et ajoutez from .logger import LOGGING en bas de votre settings.py .

4
metakermit