是否有一些很酷的技巧可以使单个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
答案 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内未运行指令,因此实际上是哪种指令最适合您的用法。