Python journalisation dans Django

Je suis l'élaboration d'un Django app, et je suis en train d'utiliser Python module de journalisation pour l'erreur/l'enregistrement des traces. Idéalement, j'aimerais avoir différents enregistreurs configuré pour différentes zones du site. Jusqu'à présent, j'ai tout de ce travail, mais une chose m'a me gratter la tête.

J'ai la racine enregistreur va sys.stderr, et j'ai configuré un autre enregistreur pour écrire dans un fichier. C'est dans ma settings.py fichier:

sviewlog = logging.getLogger('MyApp.views.scans')
view_log_handler = logging.FileHandler('C:\\MyApp\\logs\\scan_log.log')
view_log_handler.setLevel(logging.INFO)
view_log_handler.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'))
sviewlog.addHandler(view_log_handler)

Semble assez simple. Voici le problème, cependant: ce que j'écris à la sviewlog est écrit dans le fichier journal deux fois. La racine de l'enregistreur imprime seulement une fois. C'est comme addHandler() est appelée deux fois. Et quand j'ai mis mon code par le biais d'un débogueur, c'est exactement ce que je vois. Le code de la settings.py est d'obtenir exécutée deux fois, donc deux FileHandlers sont créés et ajoutés à la même enregistreur de données d'instance. Mais pourquoi? Et comment puis-je contourner ce problème?

Quelqu'un peut me dire ce qu'il se passe ici? J'ai essayé de déplacer le sviewlog enregistreur/gestionnaire de l'instanciation de code pour le fichier dans lequel il est utilisé (car il semble effectivement comme l'endroit le plus approprié pour moi), mais j'ai le même problème. La plupart des exemples que j'ai vu en ligne, utilisez uniquement la racine de l'enregistreur, et je préfère avoir plusieurs enregistreurs.

InformationsquelleAutor Jeff | 2008-12-04