Log4j não grava no arquivo quando rodo o .jar [RESOLVIDO]

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. :frowning:

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 :smiley:
E fica ai a dica pra quem tiver o mesmo problema

HAhaha você não tinha olhada dentro do jar. Tudo bem, sucesso ai!