58 votes

Python - Éviter de passer la référence de l'enregistreur entre les fonctions ?

J'ai un script Python simple qui utilise le logging intégré.

Je configure la journalisation dans une fonction. La structure de base serait quelque chose comme ceci :

 #!/usr/bin/env python
import logging
import ...

def configure_logging():
    logger = logging.getLogger("my logger")
    logger.setLevel(logging.DEBUG)
    # Format for our loglines
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    # Setup console logging
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(formatter)
    logger.addHandler(ch)
    # Setup file logging as well
    fh = logging.FileHandler(LOG_FILENAME)
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    return logger

def count_parrots():
    ...
    logger.debug??

if __name__ == '__main__':
    logger = configure_logging()
    logger.debug("I'm a log file")
    parrots = count_parrots()

Je peux appeler correctement l'enregistreur depuis __main__ . Cependant, comment appeler logger depuis la fonction count_parrots() ? Quelle est la manière la plus pythonique de gérer la configuration d'un enregistreur comme celui-ci ?

0voto

Ricardo Brandao Points 60

Si vous n'avez pas besoin des messages de log sur votre console, vous pouvez les utiliser de manière minimaliste.

Vous pouvez également utiliser tail -f myapp.log pour voir les messages sur la console.

 import logging

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', \
    filename='myapp.log', \
    level=logging.INFO)

def do_something():
    logging.info('Doing something')

def main():
    logging.info('Started')
    do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X