在IDE中运行时的回退配置

时间:2018-08-20 15:52:58

标签: logging configuration logback logback-classic

是否有一些很酷的技巧可以使单个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克隆后无法立即使用。我还试图避免在VCS中提交特定于IDE的启动器

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

  

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

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

如果有什么用,我正在使用IntelliJ,maven和git

1 个答案:

答案 0 :(得分:0)

您可以使用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>构造,但使用默认情况下的条件{ {1}}用于IDE内调用,true用于PROD调用。这将允许您使用单个false,并且默认行为是所需的,即开发人员可以从其IDE中启动您的应用程序,而无需创建自定义启动器。以下示例假定logback.xml是JVM参数,当以PROD模式运行应用程序时始终存在该参数:

logs.dir

无论如何执行此操作,您都必须提供某种 IDE内运行/ IDE内未运行指令,因此实际上是哪种指令最适合您的用法。