Pregunta ¿Dónde configuro log4j en una clase de prueba JUnit?


Mirando el último caso de prueba de JUnit que escribí, llamé al método LogConjugador de log4j () dentro del constructor de la clase. Eso funcionó bien para ejecutar solo esa clase del comando "ejecutar como JUnit test case" de Eclipse. Pero me doy cuenta de que es incorrecto: estoy bastante seguro de que nuestro conjunto de pruebas principal ejecuta todas estas clases a partir de un proceso y, por lo tanto, la configuración de log4j debería estar ocurriendo más arriba en algún lugar.

Pero aún necesito ejecutar un caso de prueba algunas veces, en cuyo caso quiero que log4j esté configurado. ¿Dónde debo colocar la llamada de configuración para que se ejecute cuando el caso de prueba se ejecute de manera independiente, pero no cuando el caso de prueba se ejecuta como parte de un conjunto más grande?


74
2018-05-18 15:37


origen


Respuestas:


los LogManager La clase determina qué configuración de log4j usar en un bloque estático que se ejecuta cuando la clase está cargada. Hay tres opciones destinadas para usuarios finales:

  1. Si especifica log4j.defaultInitOverride a falso, no configurará log4j en absoluto.
  2. Especifique manualmente la ruta al archivo de configuración y anule la búsqueda de classpath. Puede especificar la ubicación del archivo de configuración directamente utilizando el siguiente argumento para java:

    -Dlog4j.configuration=<path to properties file>

    en su configuración de corredor de prueba.

  3. Permita que log4j explore la ruta de clase para un archivo de configuración log4j durante su prueba. (el valor por defecto)

Ver también el documentación en línea.


45
2018-05-18 15:40



Generalmente solo coloco un archivo log4j.xml en src / test / resources y dejo que log4j lo encuentre solo: no se requiere código, la inicialización predeterminada de log4j lo recogerá. (Por lo general, quiero configurar mis propios registradores a 'DEPURAR' de todos modos)


54
2018-05-18 16:26



Es posible que desee ver en Fachada de registro simple para Java (SLF4J). Es una fachada que envuelve a Log4j que no requiere una llamada de configuración inicial como Log4j. También es bastante fácil cambiar Log4j para Slf4j ya que las diferencias API son mínimas.


7
2018-05-18 16:07



Yo uso las propiedades del sistema en log4j.xml:

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

y comienza 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>

4
2017-10-04 13:56