Mirando el último caso de prueba JUnit que escribí, llamé al método BasicConfigurator.configure () de log4j dentro del constructor de la clase. Eso funcionó bien para ejecutar solo esa clase del comando "ejecutar como caso de prueba JUnit" de Eclipse. Pero me doy cuenta de que es incorrecto: estoy bastante seguro de que nuestro conjunto de pruebas principal ejecuta todas estas clases desde un proceso y, por lo tanto, la configuración de log4j debería estar ocurriendo más arriba en algún lugar.
Pero todavía necesito ejecutar un caso de prueba por sí solo algunas veces, en cuyo caso quiero configurar log4j. ¿Dónde debería colocar la llamada de configuración para que se ejecute cuando el caso de prueba se ejecute de forma independiente, pero no cuando el caso de prueba se ejecute como parte de una suite más grande?
Respuestas:
La
LogManager
clase determina qué configuración de log4j usar en un bloque estático que se ejecuta cuando se carga la clase. Hay tres opciones destinadas a los usuarios finales:log4j.defaultInitOverride
false, no configurará log4j en absoluto.Especifique usted mismo la ruta al archivo de configuración manualmente y anule la búsqueda de classpath. Puede especificar la ubicación del archivo de configuración directamente mediante el siguiente argumento para
java
:-Dlog4j.configuration=<path to properties file>
en su configuración de corredor de prueba.
Permita que log4j escanee la ruta de clases en busca de un archivo de configuración log4j durante su prueba. (el valor por defecto)
Consulte también la documentación en línea .
fuente
-Dlog4j.configurationFile=log4j2.xml
. Además, si usted está tratando de carga de depuración / arranque, este ajuste puede ser útil:-Dlog4j2.debug=true
.Por lo general, solo pongo un archivo log4j.xml en src / test / resources y dejo que log4j lo encuentre por sí mismo: no se requiere código, la inicialización predeterminada de log4j lo recogerá. (Normalmente quiero configurar mis propios registradores en 'DEPURACIÓN' de todos modos)
fuente
Es posible que desee consultar Simple Logging Facade para Java (SLF4J) . Es una fachada que envuelve Log4j que no requiere una llamada de configuración inicial como Log4j. También es bastante fácil cambiar Log4j por Slf4j ya que las diferencias de API son mínimas.
fuente
Yo uso las propiedades del sistema en log4j.xml:
... <param name="File" value="${catalina.home}/logs/root.log"/> ...
y comience las pruebas con:
<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>
fuente