[RESOLVIDO] System.setErr(PrintStream);

Olá pessoal!

Estou usando o método System.setErr(PrintStream); para direcionar minhas saídas de erro para um arquivinho txt.

Só que toda vez que uso esse comando ele sobreescreve o arquivo se ele já existir. Alguém sabe como posso fazer pra que se o arquivo já existir ele adicione o que for preciso no arquivo existente, sem sobreescrevê-lo?

Grata,
Renata

OBS: Não consigo mais pesquisar nos foruns, tá com problema mesmo ou só comigo que isso tá acontecendo? :cry:

Bom eu tenho um exemplo aqui:

[code]package com.squadra.caixa.persistencia.entidade;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class ArquivoLogErro {

public static void criaArquivoLogErro (String msg){
	
	File file = null;
	FileWriter fileWriter = null;
	
	try {
		file = new File(System.getProperty("user.dir") + File.separator + "log.txt");
		
		fileWriter = new FileWriter(file, true); // creio que vc nao setou true aqui...
		 fileWriter.write(msg);
		
	} catch (IOException e) {
		e.printStackTrace();
	}finally{
		if(fileWriter != null){
			try {
				fileWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

}
[/code]

Isso deve ser questão do PrintStream que voce cria.

O construtor de FileOutputStream tem um parametro para que o proximo conteudo seja colocado depois do já existente.

Olá evertonsilvagomesjava, creio que vc não entendeu. Não se trata de um método MEU de gravação de log, isso eu tenho e funciona. Estou falando de um método específico do Java, o System.setErr(PrintStream); que faz SOZINHO o desvio do que sairia como erro no console para o PrintStream passado. Minha dúvida é como faço pra falar pra ele que não quero que ele sobreescreva o último arquivo.

Mark_Ameba eu tentei esse parâmetro que vc está falando sim. Foi a primeira coisa que tentei, e não deu certo! Ele ignora… alguma outra idéia?!

Obrigada,
Renata

[quote=RenataFA]Mark_Ameba eu tentei esse parâmetro que vc está falando sim. Foi a primeira coisa que tentei, e não deu certo! Ele ignora… alguma outra idéia?!
[/quote]
Olá,
A sugestão do Mark está certa… pra tirar a dúvida eu fiz um teste aqui e funcionou:

[code]import java.io.*;
import java.util.Date;

public class SetErr {

static final String ERRFILE = "/temp/seterrtest/stderr.txt";

public static void main (String[] args) throws IOException {

	File f = new File(ERRFILE);

	FileOutputStream fos = new FileOutputStream(f, true);
	PrintStream ps = new PrintStream(fos, true);
	
	System.setErr(ps);

	// Manda algumas mensagens para System.err, primeiro
	// manualmente depois jogando uma exceção.
	Date dt = new Date();
	System.err.println("Mensagem com println " + dt);
	new Exception("Mensagem stacktrace " + dt).printStackTrace();
}

}[/code]

Mas como? Eu estou usando aqui e não funciona!

Vou testar denovo, já respondo.

Vcs tem toda razão!

Eu tava usando certo, como vcs deram no exemplo, o fato é que o erro não era ali.
Algumas linhas pra cima, no fonte, tinha um tal de um método que estava APAGANDO meu arquivo de log. Então eu sempre tinha a impressão de que o System.setErr que estava sobreescrevendo, quando na verdade o método anterior que estava apagando e depois ele criando um novo.

Agora está tudo ok.
Desculpem pela bobeira.

Grata,
Renata