Quick Code: Como converter o StackTrace em String

Postado em por Wolmir Cezer Garbin em Java | 262 Visualizações
Última atualização em:

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

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.


Tem algo para vender? AnuncieOn.com

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.


Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Tem algo para vender? AnuncieOn.com

FIQUE POR DENTRO

Receba as novidades todo mês em seu e-mail!

Apoiadores

Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar