Oi pessoal!
Estou com seguinte problema, o log grava num arquivo perfeitamente quando rodo pelo Eclipse. Mas quando gero um .jar e executo no console do windows, o log aparece só no console e não grava no arquivo.
Alguém pode me ajudar?
Aqui está o .properties
[code]#### Usando 2 appenders, 1 para logar no console, outro para um arquivo
log4j.rootCategory=INFO, fileOut, stdout
log4j.category.positivo=DEBUG
log4j.category.org=INFO
log4j.category.httpclient.wire=INFO
O primeiro appender escreve no console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
Pattern que mostra o nome do arquivo e numero da linha.
log4j.appender.stdout.layout.ConversionPattern=Log %x: %d{dd/MM/yyyy HH:mm:ss,SSS} - %5p [%t] (%F:%L) - %m%n
O segundo appender escreve em um arquivo
log4j.appender.fileOut=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileOut.File=/app/InsightColeta.log
Cria um novo arquivo de log por dia.
log4j.appender.fileOut.DatePattern=’.'yyyy.MM.dd
log4j.appender.fileOut.layout=org.apache.log4j.PatternLayout
log4j.appender.fileOut.layout.ConversionPattern=Log %x: %d{dd/MM/yyyy HH:mm:ss,SSS} - %p - %m%n[/code]
Exemplo da classe com o método main
[code]import java.net.URL;
import org.apache.log4j.PropertyConfigurator;
public class ClasseTeste {
public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger(ClasseTeste.class);
Controller c = new Controller();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);
try {
Controller.logger.info("Inicio");
c.getData(args);
Controller.logger.info("Fim ");
} catch (Exception e) {
Controller.logger.error(" ERRO Classe Teste ",e);
e.printStackTrace();
}
}
}[/code]
Obrigada!
Oi,
Fiz alguns testes aqui e o meu funcionou. Duas coisas, primeiro a variavel logger que você está usando está dentro de Controller ou a do main ?(perceba que voce não atribui o logger criado ao logger de dentro do controller).
Segundo, da uma olhada dentro do jar gerado se o mesmo possui os arquivos *.properties e a lib do log4j para poder executar, caso não precisa gerar o executavel com esses arquivos.
Um detalhe, mantenha o properties no mesmo pacote da ClasseTeste (isso por causa da maneira que voce implementou).
Até mais
Olá jonathan.c.rodrigues!
A variavel logger que estou usando está dentro de Controller, eu tinha colocado ali no main só para um teste e acabei esquecendo de remover.
Sim, dentro do .jar possui os arquivos *.properties e a lib do log4j.
O .properties está dentro do mesmo pacote da ClasseTeste.
Mas ainda não funciona, ele imprime só no console e no arquivo não.
Mas, no construtor do Controller você está instanciando o logger ?
É uma variavel estatica no controller.
Mas eu já tentei colocar ela no main e chamar diretamente do main logger.info(“Teste”); e não funciona do mesmo jeito. Provavelmente o problema não é esse.
Eu fiz esse teste que funcionou…
import java.net.URL;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class ClasseTeste {
public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger(ClasseTeste.class);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);
try {
logger.info("Inicio");
//chamada de algum outro método complexo
logger.info("Fim ");
} catch (Exception e) {
logger.error(" ERRO Classe Teste ",e);
e.printStackTrace();
}
}
}
Ai o arquivo log4j.properties está no mesmo diretório que a ClasseTeste. No diretório raiz criei o arquivo c:\app\InsightColeta.log . Tente fazer esse testes simples, lembrando do local do log4j.properties!
Jonathan muito obrigada pela ajuda!
Mas acho que encontrei o problema.
Na hora de exportar o .jar no Eclipse eu estava usando a opção “Extract required libraries into generated JAR”
Quando na verdade eu deveria usar a opção: “Package required libraries into generated JAR”
Mas mesmo assim agradeço a sua disponibilidade
E fica ai a dica pra quem tiver o mesmo problema
HAhaha você não tinha olhada dentro do jar. Tudo bem, sucesso ai!