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?
packagecom.squadra.caixa.persistencia.entidade;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;publicclassArquivoLogErro{publicstaticvoidcriaArquivoLogErro(Stringmsg){Filefile=null;FileWriterfileWriter=null;try{file=newFile(System.getProperty("user.dir")+File.separator+"log.txt");fileWriter=newFileWriter(file,true);// creio que vc nao setou true aqui...fileWriter.write(msg);}catch(IOExceptione){e.printStackTrace();}finally{if(fileWriter!=null){try{fileWriter.close();}catch(IOExceptione){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:
importjava.io.*;importjava.util.Date;publicclassSetErr{staticfinalStringERRFILE="/temp/seterrtest/stderr.txt";publicstaticvoidmain(String[]args)throwsIOException{Filef=newFile(ERRFILE);FileOutputStreamfos=newFileOutputStream(f,true);PrintStreamps=newPrintStream(fos,true);System.setErr(ps);// Manda algumas mensagens para System.err, primeiro// manualmente depois jogando uma exceção.Datedt=newDate();System.err.println("Mensagem com println "+dt);newException("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.