如何使用slf4j和Maven在测试中打开和关闭日志记录?

时间:2017-02-14 15:36:04

标签: maven slf4j

我们正在使用slf4j和Maven构建。在编写代码时,我们不包含对slf4j实现的依赖(例如logback),而只包括slf4j本身。

在我们运行(单元)集成测试的这种情况下,slf4j回退到No-op实现,并且SUT(被测系统)代码产生的所有日志都按预期“被忽略”。

没关系,但有时我们需要显示这些SUT(调试)日志。通常我们的开发人员使用test范围添加对logback的依赖来实现此目的并将日志写入控制台。我不是这种方法的忠实粉丝,但只要他们在提交代码之前不忘记删除依赖关系就可以了。但是这个开关可能会多次出现,因此容易出错(我们最终将构建日志淹没了。)

有没有更好的方法来实现这一目标?例如,一直将logback保留为test范围的依赖关系,但设置一个属性,以避免生成日志,除非删除该属性(某种“强制No-Op”属性)?

提前致谢,

2 个答案:

答案 0 :(得分:3)

  • 让logback测试作用域为dependencie
  • 在src / test / resources文件夹下添加logback-test.xml,其根日志级别设置为NONE
  • 一旦提交,就将logback测试文件添加到.gitignore(开发人员将能够设置自定义日志级别而不会有错误地推送文件的风险)

cf。 https://logback.qos.ch/manual/configuration.html

  

如果您正在使用Maven,并且您将logback-test.xml放在   src / test / resources文件夹,Maven将确保不包含它   在制作的神器中。因此,您可以使用其他配置   文件,即测试期间的logback-test.xml,以及另一个文件,   即生产中的logback.xml。

答案 1 :(得分:1)

您可以拥有2个个人资料

<profiles>
    <profile>
        <id>debug</id>
        …
        <dependencies>
            <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
              <version>1.1.7</version>
              <scope>test</scope>
            </dependency>
        </dependencies>
        …
    </profile>
    <profile>
        <id>release</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        …
        <dependencies>
            <dependency>…</dependency>
        </dependencies>
        …
    </profile>
</profiles>

然后将logback-test.xml添加到src / test / resources中,如果pom中存在logback依赖关系并且不会将其写入任何发布jar / war,则只会将其用于测试。

然后用于调试:

mvn clean install -Dprofile=debug