Log4J

Pessoal estava eu precisando gravar o log de um programa que fiz, achei essa mão na roda, o Log4J.
Queria saber se tem como ele fazer log de todos os meus System.out.println();
Pois faço envio de muitas mensagens para o console, gostaria que as mensagens exibidas no console fossem para o arquivo de log(FileAppender). Tem como fazer isso com o Log4J sem ter que trocar todas as minhas linhas de código que envio um System.out.println(); para o console?

Olá castiel, não sei se entendi direito o que você quer mas você pode usar o log4j para enviar as mensagens para o console também.

Se você tem chamadas para sysout direto é melhor você alterá-las para fazer chamadas para algum logging, que pode ser tanto o log4j como o próprio logging no Java (java.util.logging). Simplesmente não há como alterar as chamadas ao sysout, pelo menos não que eu conheça.

O mais ideal é você usar uma façade de logging como o SLF4J (www.slf4j.org) que possui uma série de wrappers para direcionar seus logs para o log4j, logback e até o java logging.

Isso mesmo. E além disso dá para fazer logging no console e ao mesmo tempo em um arquivo, ou até mesmo arquivo + banco de dados, ou banco + console…

Abraços

Se compreendi bem o seu problema,

você quer criar um wrapper que intercepta tudo que sua aplicação enviar para o Stream padrão de saída…
algo como:

java minhaApp > meulog.txt
Bom, isso o código abaixo faz, ou seja, você pode direcionar no programa todo o Stream de saída para um arquivo:
PrintStream newps = new PrintStream(new FileOutputStream(“saida.txt”));
System.setOut(newps);

Se quer algo mais complexo, tem essa classe no código do tomcat:
Segue um link:
http://www.jexamples.com/vSrc/3088/org.apache.tomcat.util.log.SystemLogHandler?prodId=tomcat&lineNo=67&implExtId=165448&queryText=java.util.Stack.new&qType=clsMeth

Bom para usar o log4j, o seu wrapper pode fazer isso tb…

fw

Garcia, vou dar uma olhada no slf4j.
Dieval, se eu usar:
java minhaApp > meulog.txt
ele vai parar de enviar as mensagens para o console, e só vai enviar ao .txt? Se enviar para o console também isso vai servir para eu.