logback-test.xml和多模块maven项目

uir*_*ron 6 logback maven-3 maven

在我的maven项目中,我有一个模块取决于另一个模块,它是测试代码/资源:

...
<scope>test</scope>
<type>test-jar</type>
...
Run Code Online (Sandbox Code Playgroud)

现在,两个模块都有自己的logback-test.xml,每个模块都有一个特定的配置,用于在该特定模块中运行测试.但是,正如预期的那样,在子模块中运行测试时,logback会抱怨路径中有多个logback-test.xml,并且使用它的默认日志记录配置执行此操作:

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 ch.qos.logback.classic.joran.JoranConfigurator@5b0a485c - Registering current configuration as safe fallback point
Run Code Online (Sandbox Code Playgroud)

我想知道如何解决这个问题..我想为每个模块保留多个配置; 我想我不能从classpath中排除一个文件; 我真的只想回来关闭我所知道的事情.从最后两行可以看出,我在配置中的"OFF"上有完整的logback包,但在此之后它仍然会继续记录.日志模式也与我在任一配置中配置的不同.

通过SLF4J在代码中配置和使用Logback.

在父模块中运行测试时,没有记录这些测试(INFO和WARN消息都没有),所以除了奇怪的Logback行为之外,我不能把它归咎于任何其他事情.

art*_*tol 5

您可以logback-test.xml从测试罐中排除

        <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>   
Run Code Online (Sandbox Code Playgroud)

或(我没有试过),你可以使用一个命名约定logback-test-project.a.xml,logback-test-project.b.xml等,并与每个项目不同的配置万无一失-Dlogback.configurationFile=logback-test-project.a.xml.

  • 排除解决方案仅在一种情况下解决问题:在一个模块上运行测试时,所有其他依赖项都是来自存储库的jar.但是,从Eclipse运行一个单元测试(我猜这是Maven与事情没什么关系的地方),或者在父pom上运行"clean test",不受此配置的影响.不幸的是,前两种是我运行测试用例的最常见方式. (3认同)
  • 测试罐的依赖性有点痛苦; 尝试将您想要重用的测试代码移动到自己的适当模块中,然后将其logback-test.xml放入适当的位置,`{module}/src/test/resources/logback-test.xml`,以便它仅适用于此模块中的测试,然后`maven-jar-plugin`会自动将其从jar工件中排除.现在,您的其他模块可以依赖于测试范围内的测试实用程序jar.(我也开始尝试在其他模块中的其他测试中重用一个测试jar的代码,但最终将其重构为自己的模块.) (2认同)