[Resolvido] Exceptions + StackTrace

Pessoal, estou fazendo a parte de erros de uma aplicação, e gostaria de salvar todo o stackTrace das exceptions genericas, leia-se não tratas.
Porem eu so consigo pegar em um StringBuilder a primeira parte do StackTrace

usando

for (StackTraceElement e : ex.getStackTrace()) {
            sb.append(e.toString() + "\n");
        }

Então tentei percorrer as causas ex.getCause()

mas ela me retorna null, e não consigo continuar

alguem ai sabe como posso fazer isso?

[]'s

Você pode fazer assim:

[code]
private static final String LS = System.getProperty(“line.separator”);
private static final String TB = " ";

private void logThrowable(StringBuilder log, Throwable thrown, boolean isCause)
{
log.append(isCause ? “Caused by:” : “Exception:”).append(" “).append(
thrown.getClass().getSimpleName()).append(” - ").append(
thrown.getMessage());
log.append(LS);

    for (StackTraceElement ste : thrown.getStackTrace())
    {
        log.append(TB).append(ste == null ? "null" : ste.toString());
        log.append(LS);
    }

    if (thrown.getCause() != null && !isCause)
        logThrowable(log, thrown.getCause(), true);
}[/code]

Na primeira chamada passe isCause como false e o StringBuilder que conterá a exceção. Note que nem sempre existe uma causa, então é bom mesmo testar se getCause() não retorna null.

Só de curiosidade: Como vc está está capturando as exceções não tratadas?
Usa um Thread.setDefaultUncaughtExceptionHandler?
Usa um thread.setUncaughtExceptionHandler?
Usa algum recurso do seu servidor?
Ou dá um try…catch(Throwable e) no seu main?

Se você não quiser mudar em nada o formato do StackTrace, você também pode usar um StringWriter:

public String logThrowable(Throwable thrown) { StringWriter sw = new StringWriter(); thrown.printStackTrace(new PrintWriter(sw)); return sw.toString(); }

Note que no lugar do StringWriter, vc poderia fazer o PrintWriter escrever para um arquivo diretamente.

é try e catch

tudo é circundado por instruções indo das Exceptions que nos conhecemos indo ate a generica Exception, e quando ocorrer Exception, pedir para notificar.

Usei com StringWriter, funcionou muito bem. Simples pratico e facil.

Obrigado pela ajuda.

[]'s