Converter StackTrace do Java em String
Neste post vou mostrar alternativas de como é possível converter o StackTrace em uma String.
Última atualização em: | 4374 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 naExceptio
.
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 umStringWriter
, se executarmos este método, teremos a mesma saída mas desta vez impressa pelo códigoSystem.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 noExceptionUtils
recebemos umaString
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.