我一直在努力解决我的日志记录情况 ( How to properly manage logback configrations in development and production using SBT & Scala? ),但我遇到了一个有趣的问题。
根据logback documentation , logback 检查 logback-test.xml
在检查 logback.xml
之前.
我有以下文件:
src/main/resources/logback.xml
src/test/resources/logback-test.xml
所以我想在运行
sbt test
时,它会看 logback-test.xml
.这在 intellij(它自己管理测试执行)中是正确的,但从命令行运行时似乎并非如此。我重命名了我的 logback.xml 并打开了 logback 调试,这是输出。显然,它正在以相反的顺序查找文件:
14:58:21,203 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [/home/rathboma/Projects/personal/beekeeper/src/main/resources/logback.xml]
14:58:21,206 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
14:58:21,206 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/home/rathboma/Projects/personal/beekeeper/target/scala-2.10/test-classes/logback-test.xml]
我推测这是因为测试资源在 test-classes 目录中,但我不知道如何正确解决这个问题。
二、供应
-Dlogback.configurationFile=config/logback-#{environment}.xml
似乎什么也没做,它完全忽略了它。有什么想法吗?
最佳答案
我假设您没有任何拼写错误,因为它适用于 intellij。
Logback 将尝试加载 logback-test.xml
然后是常规的,然后是正常的,参见 this .尝试加载我的意思是它将类加载器带到正在运行的类(应该是测试类)并在资源中查找它。检查(例如通过打印)资源路径并验证 xml 文件是否存在。默认情况下,sbt 应确保您的测试资源在测试执行期间可用(请参阅 here )。如果您更改了构建 sbt 的非托管资源或测试任务依赖项,它可能不会被复制。
最后,如果您仍然没有发现问题(这会很奇怪),我相信您应该启动一个干净的项目来检查问题是否仍然存在,如果没有,您应该清除 intellij 中的缓存。仍然看到问题?抱歉帮不上忙,也许您的 sbt 安装或版本有问题?
关于scala - 为什么 logback 以不同的顺序加载配置并忽略系统属性(SBT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555677/