Converter StackTrace do Java em String

Neste post vou mostrar alternativas de como é possível converter o StackTrace em uma String.

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - DICA

Última atualização em: | 4275 Visualizações

A forma tradicional

Sempre que você cria um try/catch é possível imprimir o stackTrace a partir da própria exceção, veja:

public class SampleMain {

   public static void main(String[] args) {
       try {
           String nr = "123s";
           Double.parseDouble( nr );
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

Note que utilizamos a chamada do método .printStackTrace() presente na Exceptio.

O retorno da exceção será:

java.lang.NumberFormatException: For input string: "123s"
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
	at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
	at java.lang.Double.parseDouble(Double.java:538)
	at br.com.garbosoftware.documentacao.SampleMain.main(SampleMain.java:13)

Ótimo, isso já nos dá uma indicação para localizarmos a exceção no nosso código. Mas e se precisarmos enviar a exceção por e-mail, por exemplo. Precisamos de uma forma de recuperar a exceção em formato de String para que seja possível fazer uma ação.



Usando StringWriter

Uma forma de obter a exceção e converter para uma String é utilizando o StringWriter. Seu padrão é bem simples e não demanda de muita explicação, veja o exemplo:

public class SampleMain {
    public static void main(String[] args) {
        try {
            String nr = "123s";
            Double.parseDouble(nr);
        } catch (Exception e) {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            System.out.println(sw.toString());
        }
    }
}

Note que ainda utilizamos o método printStackTrace() da exceção, porém agora passamos por parâmetro um StringWriter, se executarmos este método, teremos a mesma saída mas desta vez impressa pelo código System.out.println( sw.toString());

Usando ExceptionUtils da Apache

Ainda, se estiver utilizando em seu projeto a biblioteca da apache apache.commons.lang, pode fazer o uso do ExceptioUtils para obter o log em String, veja:

import org.apache.commons.lang.exception.ExceptionUtils;

public class SampleMain {
    public static void main(String[] args) {
        try {
            String nr = "123s";
            Double.parseDouble(nr);
        } catch (Exception e) {
            String st = ExceptionUtils.getStackTrace(e);
            System.out.println(st);
        }
    }
}

Note que através do método estático getStackTrace( e ); presente no ExceptionUtils recebemos uma String com a exceção retornada, o que facilita ainda mais nossa vida.

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!