Est-il possible de décorer/étendre le système de consignation standard python, de sorte que lorsqu'une méthode de consignation est invoquée, il enregistre également le fichier et le numéro de ligne où il a été invoqué la méthode qui l'a invoqué?Comment enregistrer le nom du fichier source et le numéro de ligne en Python
Répondre
Bien sûr, vérifiez formatters dans les documents de journalisation. Plus précisément les variables lineno et pathname.
% (chemin) de Chemin complet du fichier source où a été émis l'appel d'enregistrement (le cas échéant).
% (nom de fichier) s Nom de fichier du chemin d'accès.
% (module) de Module (en partie nom de fichier).
% (funcName) s Nom de la fonction contenant l'appel de journalisation.
% (lineno) d Numéro de ligne de la source où l'appel de journalisation a été émis (si disponible).
ressemble à quelque chose comme ceci:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
En plus de Seb's very useful answer, voici un extrait de code pratique qui montre l'utilisation de l'enregistreur avec un format raisonnable:
#!/usr/bin/env python
import logging
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%d-%m-%Y:%H:%M:%S',
level=logging.DEBUG)
logger = logging.getLogger('stackoverflow_rocks')
logger.debug("This is a debug log")
logger.info("This is an info log")
logger.critical("This is critical")
logger.error("An error occurred")
Génère cette sortie:
06-06-2017:17:07:02,158 DEBUG [log.py:11] This is a debug log
06-06-2017:17:07:02,158 INFO [log.py:12] This is an info log
06-06-2017:17:07:02,158 CRITICAL [log.py:13] This is critical
06-06-2017:17:07:02,158 ERROR [log.py:14] An error occurred
Utilisez ceci pour plus de détails: formatter = logging.Formatter ( '% (asctime) s,% (nom de niveau) -8s [% (nom de fichier) s:% (module) s:% (funcName) s:% (lineno) d]% (message) s ') –
+1: Citer le Documentation. –