[RESOLVIDO] System.setErr(PrintStream);

6 respostas
RenataFA

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:

6 Respostas

evertonsilvagomesjav

Bom eu tenho um exemplo aqui:

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();
				}
			}
		}
	}
	
	
	
}
Marky.Vasconcelos

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.

RenataFA

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

gomesrod
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?!
Olá, A sugestão do Mark está certa... pra tirar a dúvida eu fiz um teste aqui e funcionou:
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();
	}
}
RenataFA

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

Vou testar denovo, já respondo.

RenataFA

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

Criado 23 de novembro de 2009
Ultima resposta 23 de nov. de 2009
Respostas 6
Participantes 4