Gravar e.printStackTrace() em um arquivo

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: