2017-08-26 1 views
0

J'ai écrit ce morceau de code pour obtenir l'espace de nom d'un document XML. J'essaie de gérer l'exception et d'écrire une trace complète dans le journal. Cependant, trace n'est pas écrit avec un message personnalisé dans le journal (même si je peux le voir à l'écran).Configuration du gestionnaire d'enregistreur Python pour la journalisation des exceptions

Je crois qu'il me manque quelque chose dans Logger handler config. Y a-t-il une configuration spécifique à laquelle nous devons faire face? ci-dessous est ma config logger jusqu'à présent.

Toute aide sera appréciée.!

logger = logging.getLogger(__name__) 
hdlr = logging.FileHandler(r'C:\link.log') 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO) 

def get_ns(xmlroot): 
    """Retrieve XML Document Namespace """ 
    try: 
     logger.info("Trying to get XML namespace detail") 
     nsmap = xmlroot.nsmap.copy() 
     logger.info("Creating XML Namespace Object, {0}".format(nsmap)) 
     nsmap['xmlns'] = nsmap.pop(None) 
    except (KeyError, SystemExit): 
     logging.exception("XML files does not contain namespace, Halting Program! ") 
     sys.exit() 
    else: 
     for ns in nsmap.values(): 
      logger.info("Retrieved XML Namespace {0}".format(ns)) 
      return ns 

sortie sur l'écran:

ERROR:root:XML files does not contain namespace, Halting Program! 
Traceback (most recent call last): 
    File "C:\link.log", line 28, in get_ns 
    nsmap['xmlns'] = nsmap.pop(None) 
KeyError: None 
+0

Vous pouvez éditer votre question pour contenir le retraçage que vous voyez à l'écran? – Odysseas

+0

@Odysseas: J'ai mis à jour la question avec la sortie d'écran. – tgcloud

Répondre

2

changement

logging.exception("XML files does not contain namespace, Halting Program! ") 

à

logger.exception("XML files does not contain namespace, Halting Program! ") 

Puisqu'il est logger que vous avez configuré pour écrire dans le fichier C:\link.log.

L'utilisation de logging.exception utilise le "root logger", qui est transmis à la console par défaut.

+0

Ça marche pour moi! Merci pour la clarification.! – tgcloud