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

1. Introduction

Lorsqu'il s'agit d'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 sous forme de chaîne 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 fonction printStackTrace () de la classe Exception peut prendre un paramètre, soit un PrintStream, soit un PrintWriter . Ainsi, il est possible, à l'aide d'un StringWriter , d'imprimer la trace de la pile dans une String :

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

Ensuite, l'appel de sw.toString () renverra la trace de la pile sous forme de chaîne .

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 en chaîne 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 de nombreuses fonctionnalités qui manquent dans les classes de base de l'API Java, y compris des classes qui peuvent être utilisées pour travailler avec les exceptions.

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

 org.apache.commons commons-lang3 3.5  

Ensuite, dans notre cas, la classe la plus intéressante est ExceptionUtils , qui fournit des fonctions pour manipuler les exceptions. En utilisant cette classe, obtenir la trace de la pile en tant que chaîne à partir d'une exception est assez simple:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Conclusion

Obtenir la trace de pile d'une exception sous forme de chaîne n'est pas difficile, mais c'est loin d'être intuitif. Cet article présente deux façons de le faire, soit en utilisant le noyau Java, soit en utilisant Apache Commons-Lang.

Gardez à l'esprit que Java 9 apportera une nouvelle API StackWalking qui devrait faciliter les choses.

Comme toujours, les exemples de code peuvent être trouvés ici sur GitHub.