Comment puis-je envoyer des messages de trace à la console (comme print
) lorsque j'exécute mon application Django sous manage.py runserver
, mais que ces messages soient envoyés dans un fichier journal lorsque j'exécute l'application sous Apache?
J'ai examiné la journalisation de Django et bien que j'ai été impressionné par sa flexibilité et sa configurabilité pour les utilisations avancées, je suis toujours perplexe sur la façon de gérer mon cas d'utilisation simple.
Réponses:
Le texte imprimé sur stderr apparaîtra dans le journal des erreurs de httpd lors de l'exécution sous mod_wsgi. Vous pouvez soit utiliser
print
directement, soit utiliser à lalogging
place.la source
print("Goodbye cruel world!", file=sys.stderr)
Voici une solution basée sur la journalisation Django. Il utilise le paramètre DEBUG plutôt que de vérifier si vous exécutez ou non le serveur de développement, mais si vous trouvez un meilleur moyen de vérifier cela, il devrait être facile à adapter.
voir https://docs.djangoproject.com/en/dev/topics/logging/ pour plus de détails.
la source
LOGGING['loggers'][logger]['handlers'] += ['console']
settings.py
vers le bas, et misDEBUG = True
(recherchez ce paramètre près du haut dans le même fichier). Ensuite, je courspython manage.py runserver
depuis un terminal (voir la documentation django pour plus de détails) et les messages du journal apparaîtront dans la fenêtre du terminal. En production, j'utiliserais un autre settings.py, oùDEBUG = False
- les messages du journal vont/path/to/your/file.log
.Vous pouvez configurer la journalisation dans votre
settings.py
fichier.Un exemple:
Cependant, cela dépend de la configuration de DEBUG, et peut-être que vous ne voulez pas avoir à vous soucier de la façon dont il est configuré. Voir cette réponse sur Comment puis-je savoir si mon application Django est exécutée sur un serveur de développement ou non? pour une meilleure façon d'écrire ce conditionnel. Edit: l'exemple ci-dessus est issu d'un projet Django 1.1, la configuration de la journalisation dans Django a quelque peu changé depuis cette version.
la source
J'utilise ceci:
logging.conf:
testapp.py:
la source
Vous pouvez le faire assez facilement avec
tagalog
(https://github.com/dorkitude/tagalog)Par exemple, alors que le module python standard écrit dans un objet fichier ouvert en mode ajout, le module App Engine (https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) remplace ce comportement et l'utilise à la place
logging.INFO
.Pour obtenir ce comportement dans un projet App Engine, il suffit de faire:
Vous pouvez étendre le module vous-même et écraser la fonction de journalisation sans trop de difficulté.
la source
Cela fonctionne assez bien dans mon local.py, cela m'évite de gâcher la journalisation régulière:
la source