[Resolvido] Exceptions + StackTrace

4 respostas
F

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

4 Respostas

V

Você pode fazer assim:

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);
    }

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.

V

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?

V

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.

F

é 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

Criado 2 de março de 2009
Ultima resposta 3 de mar. de 2009
Respostas 4
Participantes 2