Exemple simple de connexion à un fichier pour django 1.3+

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?

  1. Formateurs J’aime le faire sortir du même style que ./manage.py runserver
  2. Handlers – Je veux deux journaux – un fichier texte de débogage et une console d’informations. Cela me permet de vraiment creuser (si nécessaire) et de regarder un fichier texte pour voir ce qui se passe sous le capot.
  3. Loggers – C’est ici que nous définissons ce que nous voulons consigner. En général, django obtient WARN et ci-dessus – l’exception (donc propagée) est le back-end où j’aime voir les appels SQL puisqu’ils peuvent devenir fous. Enfin, c’est mon application avec deux gestionnaires et tout y faire.

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 .