为什么 logback 以不同的顺序加载配置并忽略系统属性 (SBT)?

2024-02-20

我一直在尝试解决我的日志记录情况(如何使用 SBT 和 Scala 正确管理开发和生产中的 logback 配置? https://stackoverflow.com/questions/27538717/how-to-properly-manage-logback-configrations-in-development-and-production-using),我遇到了一个有趣的问题。

根据回溯文档 http://logback.qos.ch/manual/configuration.html#logback.statusLC,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 https://github.com/qos-ch/logback/blob/4dd08e68321548cd85251ec389f5a832505e1268/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java。通过尝试加载,我的意思是它将让类加载器运行到正在运行的类(应该是测试类)并在资源中查找它。检查(例如通过打印)资源的路径并验证 xml 文件是否存在。默认情况下,sbt 应确保您的测试资源在测试执行期间可用(请参阅here https://www.scala-sbt.org/0.13/docs/Testing.html)。如果您更改了构建 sbt 的非托管资源或测试任务依赖项,它可能不会被复制。

最后,如果您仍然没有找到问题(这会很奇怪),我相信您应该启动一个干净的项目来检查问题是否仍然存在,如果没有,您应该清理 intellij 中的缓存。仍然发现问题吗?抱歉无法提供帮助,也许您的 sbt 安装或版本有问题?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 logback 以不同的顺序加载配置并忽略系统属性 (SBT)? 的相关文章

随机推荐