Lista,
No código abaixo como eu gravo um arquivo contendo o printStackTrace???
Muito obrigado,
Marques
try {
//trecho gera Exception
} catch (Exception e) {
//Como eu gravo em um arquivo e.printStackTrace() ???
}
Lista,
No código abaixo como eu gravo um arquivo contendo o printStackTrace???
Muito obrigado,
Marques
try {
//trecho gera Exception
} catch (Exception e) {
//Como eu gravo em um arquivo e.printStackTrace() ???
}
Use o LOG4J. Essa framework faz tudo pra vc. Atende essa sua necessidade e abrange muito mais. Basta jogar o JAR no classpath da sua aplicação e criar um log4j.properties (arquivo txt com configurações) para ele começar a gerar essas informações p/ vc.
Aí, vc coloca um comando tipo assim:
[code]
private static final Logger LOGGER = Logger.getLogger(SuaClasse.class);
.
.
.
try {
//trecho gera Exception
} catch (Exception e) {
LOGGER.error(" Seu erro no arquivo txt: " + e.printStackTrace());
}[/code]
Dá uma olhada no exemplo nesse site:
http://www.vipan.com/htdocs/log4jhelp.html
[code]public void printStackTrace(PrintStream s)
Prints this throwable and its backtrace to the specified print stream.
Parameters:
s - PrintStream to use for output[/code]
[code]public void printStackTrace(PrintWriter s)
Prints this throwable and its backtrace to the specified print writer.
Parameters:
s - PrintWriter to use for output
Since:
JDK1.1 [/code]
Qualquer coisa dá uma sacada nesses métodos aew da API de Exception
Espero ter ajudado!!
Flw aew e t+!!
Tenho algo pronto aqui:
public static boolean setFileContentAsStackTrace(File file, Throwable t, boolean append){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy aa hh:mm:ss");
String text = "\r\n\r\n" + sdf.format(new Date()) + "\r\n" + sw.toString();
pw.close();
try {
sw.close();
} catch (Exception e) {
}
return setFileContentAsText(file, text, append);
}
public static boolean setFileContentAsText(File file, String text, boolean append){
try {
if(file == null || !file.exists() || !file.isFile())
throw new FileNotFoundException(file.getAbsolutePath());
if(text == null)
text = "";
FileWriter fw = new FileWriter(file, append);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(text);
bw.close();
fw.close();
return true;
} catch (Exception e) {
return false;
}
}
Eu uso um uncaughtExceptionHandler para capturar toda e qualquer exceção Runtime que não tenha sido capturada.
Fazer isso é muito fácil. Logo no início do programa faça:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e)
{
//Aqui vai o código para gravar as exceções Runtime não foram capturadas
});
A vantagem de registrar o UncaugthExceptionHandler é que você pode passar a capturar as exceções específicas, evitando o temível catch em “Exception” (como você fez ali em cima).
Como faço a gravação? Atualmente estou usando o log do próprio Java, do Pacote java.util.logging. Ele não é tão sofisticado quanto o Log4J, mas acho que atende a todas as minhas necessidades de log, além do fato de já ser parte do JDK (não exigindo assim nenhum import de jar e sendo mantido pela própria sun).
Basicamente, para usar o Logger do Java, você faz:
[code]
//O log geralmente é um atributo estático da classe.
private static final Logger logger = Logger.getLogger(getClass().getCanonicalName());
//No método onde quero capturar uma exceção verificada faço
try {
//Faz alguma coisa
}
catch (ExcecaoVerificada e) {
//Só capturo exceções obrigatórias, sempre no tipo mais específico
//As não obrigatórias deixo pro UncaughtExceptionHandler tratar.
logger.log(Level.SEVERE, e.getMessage(), e);
}[/code]
Para fazer o logger gravar num arquivo, você associa ao log um FileHandler. Dê uma pesquisada! É muito fácil de fazer. O FileHandler ainda te dá opção de limitar o tamanho máximo do arquivo de log, de gerar mais de um arquivo quando exceder esse tamanho, etc. Você ainda pode definir nível para o log. Enfim, tudo que se esperaria de um bom logger simples. E, diferente do log4j, não exige arquivo de configurações e nem jar externo.
Eu apoio o amigo que indicou o Log4J.
Vale a pena aprender :thumbup: