2012-02-27 18 views
6

En mi proyecto Maven, tengo un módulo en función de la otra y que es el código de prueba/recursos:logback-test.xml y multi-módulo

... 
<scope>test</scope> 
<type>test-jar</type> 
... 

Ahora, ambos módulos tienen su propia logback-test.xml, cada uno con una configuración específica para ejecutar pruebas en ese módulo en particular. Sin embargo, como era de esperar, cuando la ejecución de pruebas en el módulo de niño, logback se queja con una advertencia de que hay múltiples logback-test.xml en el camino, y hace que, con su configuración de registro predeterminado:

08:44:17,528 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
08:44:17,530 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:path/to/my/project/module2/logback-test.xml] 
08:44:17,532 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs multiple times on the classpath. 
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module2/logback-test.xml] 
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module1/logback-test.xml] 
08:44:17,636 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
08:44:17,647 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 
08:44:17,653 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 
08:44:17,692 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 
08:44:17,764 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN 
08:44:17,764 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.myproject] to TRACE 
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF 
08:44:17,768 |-INFO in [email protected] - Registering current configuration as safe fallback point 

Me pregunto ¿Cómo podría resolver este problema? Quiero mantener múltiples configuraciones para cada módulo; Supongo que no puedo excluir un archivo de classpath; Realmente solo quiero volver a conectarme para callarme sobre cosas de las que soy consciente. Como se puede ver en las últimas dos líneas, tengo el paquete de inicio de sesión completo en "OFF" en mi configuración, pero aún así continúa con el registro después de ese punto. El patrón de registro también es diferente de lo que he configurado en cualquiera de las configuraciones.

Logback está configurado y se utiliza en el código a través de SLF4J.

Al ejecutar las pruebas en el módulo principal, nada de esto se registra (ni los mensajes INFO ni WARN), así que no puedo culpar a nada más que al extraño comportamiento de Logback.

Respuesta

5

Puede excluir logback-test.xml de la jarra de prueba

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>test-jar</goal> 
        </goals> 
        <configuration> 
        <excludes> 
         <excludes>logback-test.xml</excludes> 
        </excludes> 
        </configuration> 
       </execution> 
      </executions>    
     </plugin> 

O (no he probado este) se puede utilizar una convención de nomenclatura logback-test-project.a.xml, etc. logback-test-project.b.xml segura y configurar de manera diferente en cada proyecto con -Dlogback.configurationFile=logback-test-project.a.xml.

+3

la solución de exclusión resuelve el problema solo en un caso: al ejecutar pruebas en un módulo, cuando todas las demás dependencias son jarras del depósito. Sin embargo, ejecutar una prueba unitaria desde Eclipse (creo que este es el punto donde Maven tiene poco que ver con las cosas), o ejecutar "prueba limpia" en el pom padre, no se ven afectados por esta configuración. Lamentablemente, los dos primeros son las formas más frecuentes en que corro mis casos de prueba. – uiron

+0

¿Su POM padre tiene su propia 'prueba de registro' o es puramente un agregador? – artbristol

+0

no, no hay un código en el padre. Estaba pensando en tener solo la configuración de inicio de sesión como principal, pero realmente quiero tener diferentes configuraciones de registro para cada módulo. – uiron