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

Langage Java Discussion :

Récupérer la trace d'une exception


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut Récupérer la trace d'une exception
    Bonjour à tous,

    Je travaille sur une appli web exécutant des jobs Quartz afin d'effectuer des mailings. Cette application est découpée en plusieurs couches. Pour chacune des couches, j'ai créé une exception. Les exceptions levées dans une couche sont envoyées à la couche supérieure et ainsi de suite.
    Dans la couche de plus haut niveau, nous avons une fonctionnalité permettant d'envoyer un mail en cas d'erreur. Dans ce mail, je souhaiterais afficher la trace complète de l'exception, comme le fait la méthode printStackTrace(). Existe-t'il un moyen pour récupérer ces informations ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Oui c'est tout à fait possible, soit en la récupérant directement sous forme de String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	StringWriter sw = new StringWriter();
    	e.printStackTrace(new PrintWriter(sw));
    	System.err.println(sw.toString());

    Sinon tu peux utiliser getStackTrace() et la classe StackTraceElement pour récupérer une à une toutes les informations du stacktrace...

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut
    Merci pour ta réponse

    Je viens d'essayer ta solution avec le StringWriter mais le problème est qu'à l'exécution, j'obtiens une java.lang.StackOverflowError

    Pour info, voici la méthode toString() de la classe mère de mes exceptions personnalisées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public final String toString() {
    		final StringBuffer sbExc = new StringBuffer();
    		final StringWriter stringWriter = new StringWriter();
     
    		this.printStackTrace(new PrintWriter(stringWriter));
    		sbExc.append(stringWriter.toString());
     
    		return sbExc.toString();
    	}
    Cette méthode est appelée lors de la construction du mail d'erreur.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut
    Bon ben finalement c'est bon !

    J'ai juste déporter le traitement à l'endroit où est construit le mail et ça marche nickel !

    Merci encore pour ta réponse, qui plus est aussi rapide

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Quel est la trace du StackOverFlow ?!

    Sinon tu utilises un StringBuffer inutilement, il y en a déjà un dans StringWriter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public final String toString() {
    		final StringWriter stringWriter = new StringWriter();
     
    		this.printStackTrace(new PrintWriter(stringWriter));
    		return stringWriter.toString();
    	}
    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut
    Merci pour tes précisions ! Mais comme je le disais juste après avoir signalé la StackOverflowError, j'ai déporté la récupération de la trace dans la méthode de construction du mail d'erreur dans une classe spécifique et non plus dans la classe de l'exception elle-même et je n'ai plus de problèmes.

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

Discussions similaires

  1. Récupérer une exception dans une page d'erreur
    Par crawling5 dans le forum JSF
    Réponses: 3
    Dernier message: 15/11/2007, 08h46
  2. Page d'erreur sur une exception perso et traces
    Par Invité dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/09/2007, 15h51
  3. [C#]Comment récupérer le code d'une Exception ?
    Par joujoukinder dans le forum C#
    Réponses: 18
    Dernier message: 30/07/2007, 01h47
  4. [WinDev 7.5] Récupérer une exception
    Par sylsau dans le forum WinDev
    Réponses: 1
    Dernier message: 29/12/2006, 18h01
  5. [Exception] récupération de la stack trace d'une Throwable
    Par totof2308 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 14/05/2004, 14h49

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