Je n'arrive pas à comprendre comment configurer un enregistreur "par défaut" pour mon installation Django. Je voudrais utiliser le nouveau LOGGING
paramètre de Django 1.3 dans settings.py
.
J'ai regardé l'exemple du Django Logging Doc , mais il me semble qu'ils ne configurent que des gestionnaires qui feront la journalisation pour des enregistreurs particuliers. Dans le cas de leur exemple, ils installent un gestionnaire pour les enregistreurs nommés «django», «django.request» et «myproject.custom».
Tout ce que je veux faire est de configurer une valeur par défaut logging.handlers.RotatingFileHandler
qui gérera tous les enregistreurs par défaut. c'est-à-dire que si je crée un nouveau module quelque part dans mon projet et qu'il est indiqué par quelque chose comme:, my_app_name.my_new_module
je devrais pouvoir le faire et avoir tous les journaux dans les journaux de fichiers en rotation.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
logs/
dossier :-). Sinon, vous obtiendrez une erreur lorsque vous exécuterez./manange.py runserver
. @Chris W. Merci pour vos exemples de paramètres de journalisation. Cela m'a beaucoup aidé!logger = logging.getLogger('foo'); logger.warn('bar');
ledefault
gestionnaire attrapera cette journalisation et quelque chose comme cela<time> WARN: foo: bar
se terminera danslogs/mylog.log
Comme vous l'avez dit dans votre réponse , Chris, une option pour définir un enregistreur par défaut est d'utiliser la chaîne vide comme clé.
Cependant, je pense que la manière prévue est de définir un enregistreur spécial sous la
root
clé du dictionnaire de configuration de journalisation. J'ai trouvé ceci dans la documentation Python :Voici la configuration de votre réponse modifiée pour utiliser la
root
clé:Pour être honnête, je ne vois aucune différence de comportement entre les deux configurations. Il semble que la définition d'un enregistreur avec une clé de chaîne vide modifiera l'enregistreur racine, car
logging.getLogger('')
retournera l'enregistreur racine.La seule raison pour laquelle je préfère
'root'
plus''
est qu'il est explicite sur la modification de l'enregistreur racine. Au cas où vous étiez curieux,'root'
remplace''
si vous définissez les deux, simplement parce que l'entrée racine est traitée en dernier.la source
root
entrée dans la racine du dict dans le processus de transition par ailleurs en douceur de la logique 2.6 fileConfig vers 2.7 dictConfig one.après ajouter:
nous pouvons changer de format pour:
ou
la source
J'ai fait un échantillon rapide pour vérifier quelle configuration est utilisée lorsque la
root
clé et l'''
enregistreur vide sont référencés dans config dict.Imprime le résultat suivant:
indiquant que la configuration sous
root
clé a la priorité la plus élevée. Si le bloc est supprimé, le résultat est:Dans les deux cas, j'ai pu déboguer et de déterminer que les trois enregistreurs (
l1
,l2
etroot
) fait référence la même instance de l' enregistreur, l'enregistreur racine.J'espère que cela aidera d'autres personnes qui, comme moi, ont été déroutées par les 2 façons différentes de configurer l'enregistreur racine.
la source