IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Rediriger les erreurs en utilisant le module logging


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Points : 28
    Points
    28
    Par défaut Rediriger les erreurs en utilisant le module logging
    Bonjour,
    Comment faire pour rediriger les erreurs en utilisant le module logging.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/python2.4
    # -*- coding:Latin-1 -*-
     
    import os
    import logging
     
    myFormat = "%(asctime)s %(threadName)-10s %(levelname)-8s %(message)s"
    myFileName = "mylogging.log"
     
    logging.basicConfig(level=logging.DEBUG,
                format=myFormat,
                filename=os.path.join(os.path.dirname(os.path.realpath(__file__)),myFileName),
                filemode="a")
     
    logging.debug("Some debug")
    logging.info("Some information")
    logging.warning("Some warning")
    logging.error("Some error")
     
    ## create an error
    import moduleinexistant
    Je voudrais que l'erreur ci dessous soit redirigée dans le fichier log plutôt qu'à l'écran.
    Traceback (most recent call last):
    File "./mylogging.py", line 21, in ?
    import moduleinexistant
    ImportError: No module named moduleinexistant
    Merci par avance.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Bon, je viens de trouver une solution mais y en a-t-il une meilleure ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/python2.4
    # -*- coding:Latin-1 -*-
     
    import os
    import sys
    import logging
     
    myFormat = "%(asctime)s %(threadName)-10s %(levelname)-8s %(message)s"
    myFileName = "mylogging.log"
     
     
    ## ---------------------------------------------------------------------------
    logging.basicConfig(level=logging.DEBUG,
                format=myFormat,
                filename=os.path.join(os.path.dirname(os.path.realpath(__file__)),myFileName),
                filemode="a")
     
    class LogErr:
        def write(self, data):
            logging.error(data.strip("\n"))
     
    sys.stderr = LogErr()
     
    ## ---------------------------------------------------------------------------
    logging.debug("Some debug")
    logging.info("Some information")
    logging.warning("Some warning")
    logging.error("Some error")
     
    ## create an error
    import moduleinexistant

    2008-09-23 18:59:19,683 MainThread DEBUG Some debug
    2008-09-23 18:59:19,684 MainThread INFO Some information
    2008-09-23 18:59:19,684 MainThread WARNING Some warning
    2008-09-23 18:59:19,684 MainThread ERROR Some error
    2008-09-23 18:59:19,685 MainThread ERROR Traceback (most recent call last):
    2008-09-23 18:59:19,685 MainThread ERROR File "./mylogging.py", line 36, in ?
    2008-09-23 18:59:19,686 MainThread ERROR
    2008-09-23 18:59:19,686 MainThread ERROR import moduleinexistant
    2008-09-23 18:59:19,687 MainThread ERROR ImportError
    2008-09-23 18:59:19,687 MainThread ERROR :
    2008-09-23 18:59:19,687 MainThread ERROR No module named moduleinexistant
    2008-09-23 18:59:19,688 MainThread ERROR

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Tiens j'avais le même problème, et la même solution. Ca marche mais c'est pas idéal.

    Est-ce que quelqu'un a une autre soluce à proposer ?

  4. #4
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    A priori le module traceback devrait te convenir. tu englobes ton programme dans un try, except et tu envois le traceback ou tu veux. J'ai pas testé, mais cela semble correspondre.

    http://docs.python.org/library/trace...dule-traceback
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'utilise traceback et avait déjà lu cette astuce qui consiste à englober le programme entier.
    Sauf que chez moi ça ne marchait pas, l'exception n'arrivait pas jusqu'au try/except qui englobe le tout : l'exception n'est pas gérée, le programme plante, mais la pile d'erreur ne remonte pas jusqu'au 1er try/except.

    Je n'avais pas fouillé plus loin.. Mais si quelqu'un sait jusqu'où remontent les exceptions, histoire de comprendre un peu, je suis preneur.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Les exception remonte jusqu'à l'interpréteur si elle ne sont pas attrapées avant. Et si elles arrivent jusque la, ton programme ce termine avec le traceback que l'on connait tous

    Si tu as fais un :
    Code exception : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        ...code...
    except Exception, e:
       ... code...
    il est possible que certaines ne soient pas attrapées, genre les SystemExit par exemple, les GeneratorExit... Tu peux toujours regarder ICI pour la hiérarchie complète des exceptions.

    Sinon je ne vois pas pourquoi elle ne seraient pas bloquées.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JVM] Rediriger les erreurs coredump
    Par DevServlet dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 15/07/2013, 14h45
  2. Chercher les batchs qui utilisent un Module
    Par a_karim_fr dans le forum z/OS
    Réponses: 11
    Dernier message: 21/10/2009, 14h11
  3. Rediriger les erreurs d'authentification avec syslog
    Par ibhow dans le forum Administration système
    Réponses: 1
    Dernier message: 07/08/2008, 20h23
  4. Rediriger les erreurs d'une commande
    Par GLDavid dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2005, 21h03
  5. Rediriger les warnings et messages d'erreur
    Par biggir dans le forum Langage
    Réponses: 3
    Dernier message: 31/03/2005, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo