Olhando para o último caso de teste JUnit que escrevi, chamei o método BasicConfigurator.configure () do log4j dentro do construtor de classe. Isso funcionou bem para executar apenas aquela única classe do comando "executar como caso de teste JUnit" do Eclipse. Mas percebo que está incorreto: tenho quase certeza de que nosso conjunto de testes principal executa todas essas classes de um processo e, portanto, a configuração do log4j deve estar acontecendo em algum lugar mais acima.
Mas eu ainda preciso executar um caso de teste sozinho algumas vezes, caso em que quero log4j configurado. Onde devo colocar a chamada de configuração para que seja executada quando o caso de teste é executado de forma autônoma, mas não quando o caso de teste é executado como parte de um conjunto maior?
Respostas:
A
LogManager
classe determina qual configuração log4j usar em um bloco estático que é executado quando a classe é carregada. Existem três opções destinadas aos usuários finais:log4j.defaultInitOverride
como false, ele não configurará log4j de forma alguma.Especifique o caminho para o arquivo de configuração manualmente e substitua a pesquisa de caminho de classe. Você pode especificar a localização do arquivo de configuração diretamente usando o seguinte argumento para
java
:-Dlog4j.configuration=<path to properties file>
na configuração do executor de teste.
Permita que log4j varra o classpath para um arquivo de configuração log4j durante seu teste. (o padrão)
Veja também a documentação online .
fonte
-Dlog4j.configurationFile=log4j2.xml
. Além disso, se você está tentando carregar debug / arranque, esta definição pode ser útil:-Dlog4j2.debug=true
.Geralmente, coloco um arquivo log4j.xml em src / test / resources e deixo o log4j localizá-lo por conta própria: nenhum código é necessário, a inicialização padrão do log4j o pegará. (Eu normalmente quero definir meus próprios registradores para 'DEBUG' de qualquer maneira)
fonte
Você pode querer dar uma olhada em Simple Logging Facade for Java (SLF4J) . É uma fachada que envolve Log4j que não requer uma chamada de configuração inicial como Log4j. Também é bastante fácil trocar Log4j por Slf4j, pois as diferenças de API são mínimas.
fonte
Eu uso as propriedades do sistema em log4j.xml:
... <param name="File" value="${catalina.home}/logs/root.log"/> ...
e comece os testes com:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <systemProperties> <property> <name>catalina.home</name> <value>${project.build.directory}</value> </property> </systemProperties> </configuration> </plugin>
fonte