【问题标题】:Logback configuration when running in IDE在 IDE 中运行时的 Logback 配置
【发布时间】:2019-01-26 19:10:58
【问题描述】:

有没有什么很酷的技巧可以让一个 logback.xml 配置更改为 PROD 与在 IDE 中运行?

我想根据我是在我的 IDE 中运行还是在 jar 中的 PROD 中运行来使用不同的附加程序、模式和日志级别。

我目前在src/main/resources 中使用 2 个不同的文件:logback.xml(在 PROD/jar 中使用)和 logback-dev.xml,在我的 IDE 中运行时使用。不理想的部分是每个开发人员都必须配置他们的 IDE 启动器以包含-Dlogback.configurationFile=path/to/logback-dev.xml。换句话说,它在 git clone 之后不能开箱即用。我还试图避免在我的 VCS 中提交特定于 IDE 的启动器

我看到了 <if> 构造,但我不确定我可以使用什么条件来检测 IDE。 if 条件似乎非常严格:

条件是一个 Java 表达式,其中只能访问上下文属性或系统属性

我也尝试在src/test/resouces 中使用logback-test.xml,但这仅适用于单元测试,并且在正常启动应用程序时它不会被 maven 复制到类路径

如果有任何用处,我正在使用 IntelliJ、maven 和 git

【问题讨论】:

    标签: logging configuration logback logback-classic


    【解决方案1】:

    您可以使用 JUnit 从 IDE 中启动您的应用程序,这将导致 logback-test.xml 被使用。您可以将此“测试”类命名为 MyAppTool 之类的名称,即带有一个后缀,可以防止 Surefire 将其作为测试执行。或者使用标签和配置文件从您的标准测试套件调用中排除这个“测试”用例。例如:

    public class MyAppTool {
      @Test
      public void runMyApp() {
        // invoke a 'main' class or however you run your app
      }
    }
    

    这基本上是一种“在我的 VCS 中提交特定于 IDE 的启动器”的方式,所以如果这绝对不是运行器,那么另一种方法是使用 <if> 构造,但使用默认情况下为 true 的条件用于 IDE 内调用,false 用于 PROD 调用。这将允许您使用单个 logback.xml 并且默认行为将是所需的,即开发人员可以从他们的 IDE 启动您的应用程序,而无需创建自定义启动器。以下示例假定 logs.dir 是一个 JVM 参数,在 PROD 模式下运行您的应用时始终存在该参数:

    <if condition='isNull("logs.dir")'>
      <then>
        <!-- in-IDE appenders -->
      </then>
      <else>
        <!-- standard appenders -->
      </else>
    </if>
    

    无论您如何执行此操作,您都必须提供某种running-in-IDE / not-running-in-IDE指令,所以这实际上是哪种指令最适合您的使用形式的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2011-07-15
      • 2018-05-18
      • 1970-01-01
      • 2019-06-07
      相关资源
      最近更新 更多