À l'aide de Python journalisation dans plusieurs modules

J'ai un petit projet de python qui a la structure suivante -

Project 
 -- pkg01
   -- test01.py
 -- pkg02
   -- test02.py
 -- logging.conf

J'ai l'intention d'utiliser la journalisation par défaut un module pour imprimer les messages sur la sortie standard, et un fichier journal.
Pour utiliser le module de journalisation, certains d'initialisation est nécessaire -

import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')

logger.info('testing')

À l'heure actuelle, j'ai effectuer cette initialisation dans chaque module avant de commencer la journalisation des messages. Est-il possible d'effectuer cette initialisation qu'une seule fois à un endroit, que les mêmes paramètres sont réutilisés par l'exploitation forestière à travers tout le projet?

  • En réponse à votre commentaire sur ma réponse: vous n'avez pas à appeler fileConfig dans chaque module de journalisation, sauf si vous avez if __name__ == '__main__' logique dans chacun d'eux. prost réponse n'est pas une bonne pratique si le package est une bibliothèque, mais il pourrait travailler pour vous - il ne faut pas configurer la journalisation dans les paquets de bibliothèque, autres que pour ajouter un NullHandler.
  • prost implicite que nous devons appeler l'importation et l'enregistreur de stmts dans chaque module, et appeler l'fileconfig stmt dans le module principal. nest pas similaire à ce que vous dites?
  • prost est en train de dire que vous devriez mettre la journalisation config code dans package/__init__.py. Ce n'est pas normalement l'endroit où vous mettre if __name__ == '__main__' code. Aussi, prost exemple dirait qu'il va appeler la config code sans condition à l'importation, ce qui n'est pas bon pour moi. Généralement, l'exploitation forestière config code doit être fait en un seul endroit et ne devrait pas se produire comme effet secondaire de l'importation, sauf lorsque vous importez __principaux__.
  • vous avez raison, j'ai totalement raté la ligne "# package/__init__.py " dans son code de l'échantillon. merci pour le signaler et votre patience.
  • Donc ce qui arrive si vous avez plusieurs if __name__ == '__main__'? (il n'est pas mentionné explicitement dans la question si c'est le cas)
InformationsquelleAutor Quest Monger | 2013-03-31