Les notes de version indiquent:
Django 1.3 ajoute une prise en charge au niveau de la structure 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 puis-je configurer cette nouvelle fonctionnalité géniale de sorte que je puisse pepper mon code avec
logging.debug('really awesome stuff dude: %s' % somevar)
et voir le fichier “/tmp/application.log” remplit avec
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 Python par défaut et cette prise en charge au niveau de la structure?
Je l’aime vraiment tellement voici votre exemple de travail! Sérieusement c’est génial!
Commencez par mettre cela dans vos 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?
Maintenant, comment puis-je permettre à MYAPP de l’utiliser …
Selon la documentation, mettez ceci en haut de vos fichiers (views.py) ..
import logging log = logging.getLogger(__name__)
Alors, faire quelque chose pour ça.
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 journalisation sont expliqués ici et pour le python pur ici .
Basé en partie sur la configuration de journalisation suggérée par rh0dium et sur d’ autres recherches que j’ai effectuées moi-même, j’ai commencé à assembler un exemple de projet Django avec de bonnes valeurs de journalisation – fail-nicely-django .
Exemple de sortie de fichier journal:
2016-04-05 22:12:32,984 [Thread-1 ] [INFO ] [djangoproject.logger] This is a manually logged INFO ssortingng. 2016-04-05 22:12:32,984 [Thread-1 ] [DEBUG] [djangoproject.logger] This is a manually logged DEBUG ssortingng. 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 de journalisation dans votre projet Django et ajoutez à from .logger import LOGGING
au bas de vos parameters.py .