[Python] : comment logger dans vos scripts avec logging ?

Print Friendly, PDF & Email

Python est bien équipé en matière de modules. Une fois de plus, il nous met à disposition le nécessaire pour faire simplement les choses. Logguer est une nécessité pour savoir si vos scripts et vos applications se portent bien, pour suivre les résultats et superviser.

Avec logging, vous pourrez logger en mettant en forme vos logs en les paramétrant de différentes manières pour vous faciliter la vie. Logging permet de structurer, hierarchiser, écrire vos logs.

Voici ce que j’utilise de mon côté :

import logging
import sys

# create logger
logging.basicConfig(filename='/var/log/script.log',format='%(asctime)s - %(name)s - %(levelname)s >>>> %(message)s',level=logging.DEBUG)
logger = logging.getLogger('script python xavki')
logger.addHandler(logging.StreamHandler(sys.stdout))

if __name__ == "__main__":
  try:
     logger.info('Action 1 [OK]')
  except:
     logger.warning('Action 1 [KO]')

Alors voici ce que nous avons fait :

  • import des modules logging et sys
  • instanciation du logger
    • le fichier de log et sa localisation
    • le format (date / nom / niveau de log / message)
    • ajout d’un handler qui permet de logger également sur stdout (on log donc dans un fichier et à l’écran)
  • dans le try (cas de réussite) : lancement du script et log pour dire [OK]
  • dans le except (cas d’erreur) : log pour dire [KO]

Et le résultat :

2018-08-19 22:10:26,620 - script python xavki - INFO - Action 1 [OK]
2018-08-19 22:10:26,695 - script python xavki - WARNING - Action 1 [KO]

A vous ensuite d’organiser la hiérarchie de vos log :

  • info
  • warning
  • debug
  • error
  • critical

Si votre configuration vous semble un peu complexe et pour homogénéiser plus facilement votre conf logging, utilisez un fichier de conf (format ini ou yaml).

logging.config.fileConfig('logging.conf')

Vous pouvez consulter la page de doc python pour en savoir plus. Sachez qu’il est aussi possible de logger par mail en smtp.

Découvrez  [Python] : un mot sur les listes ? boucles for...