Conversion d’une trace de pile en chaîne en Java

Conversion d'une trace de pile en chaîne en Java

1. introduction

Lorsque nous traitons des exceptions en Java, nous enregistrons fréquemment ou affichons simplement des traces de pile. Cependant, parfois, nous ne voulons pas simplement imprimer la trace de la pile, nous pouvons avoir besoin d'écrire la trace de la pile dans un fichier, dans une base de données ou même de la transmettre sur le réseau.

À ces fins, avoir la trace de la pile en tant queString serait très utile. Et malheureusement, Java ne fournit pas une méthode très pratique pour le faire directement.

2. Conversion avec Core Java

Commençons par la bibliothèque principale.

La fonctionprintStackTrace() de la classeException peut prendre un paramètre, soit unPrintStream soit unPrintWriter. Ainsi, il est possible, à l'aide d'unStringWriter, d'imprimer la trace de la pile en unString:

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);

Ensuite, l'appel desw.toString() renverra la trace de la pile en tant queString.

3. Conversion avec Commons-Lang

Bien que la méthode précédente soit le moyen le plus simple de convertir une trace de pile enString en utilisant le noyau Java, elle reste un peu lourde. Heureusement,Apache Commons-Lang fournit une fonction qui fait le travail.

Apache Commons-Lang est une bibliothèque très utile offrant un grand nombre de fonctionnalités qui manquent dans les classes principales de l'API Java, y compris des classes pouvant être utilisées pour gérer les exceptions.

Commençons par la configuration du projet. Lors de l'utilisation de Maven, il suffit d'ajouter la dépendance suivante auxpom.xml:


    org.apache.commons
    commons-lang3
    3.5

Ensuite, dans notre cas, la classe la plus intéressante estExceptionUtils, qui fournit des fonctions pour manipuler les exceptions. En utilisant cette classe, obtenir la trace de la pile en tant queString à partir d'unException est assez simple:

String stacktrace = ExceptionUtils.getStackTrace(e);

4. Conclusion

Obtenir la trace de pile d’une exception en tant queString n’est pas difficile, mais il est loin d’être intuitif. Cet article présente deux manières de le faire, en utilisant le noyau Java ou en utilisant Apache Commons-Lang.

Gardez à l'esprit que Java 9 apportera un nouveauStackWalking API qui devrait faciliter les choses.

Comme toujours, les exemples de code peuvent être trouvéshere on GitHub.