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

标签 scala logging sbt slf4j logback

我一直在努力解决我的日志记录情况 ( 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/

    相关文章:

    scala - 如何使用 scala 将多个文件归档到 .zip 文件中?

    c++ - 无法弄清楚错误

    android - 如何在 SBT 中向 Jan Berkel 的 Android 插件添加更多类似的任务和设置?

    scala - 在 SBT 中为模块依赖项使用自定义类加载器

    scala - 从 F[A] 创建 ReaderT[F, D, A]

    scala - 如何在构建时获取 SBT 暂存目录?

    xml - Scala XML,获取父节点具有属性值匹配的节点

    java - weblogic log4j.xml 更改记录器的 "level value"(即时)

    python - pip.main() 重置 python 中的日志设置

    scala - 未找到 java.time.Duration 类 - 继续使用 stub