我们正在使用slf4j和Maven构建。在编写代码时,我们不包含对slf4j实现的依赖(例如logback),而只包括slf4j本身。
在我们运行(单元)集成测试的这种情况下,slf4j回退到No-op实现,并且SUT(被测系统)代码产生的所有日志都按预期“被忽略”。
没关系,但有时我们需要显示这些SUT(调试)日志。通常我们的开发人员使用test
范围添加对logback的依赖来实现此目的并将日志写入控制台。我不是这种方法的忠实粉丝,但只要他们在提交代码之前不忘记删除依赖关系就可以了。但是这个开关可能会多次出现,因此容易出错(我们最终将构建日志淹没了。)
有没有更好的方法来实现这一目标?例如,一直将logback保留为test
范围的依赖关系,但设置一个属性,以避免生成日志,除非删除该属性(某种“强制No-Op”属性)?
提前致谢,
答案 0 :(得分:3)
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