在 IDE 中运行时的回日志配置



有什么很酷的技巧可以让单个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 表达式,其中只能访问上下文属性或系统属性

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

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

您可以使用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>

但是,您必须提供某种在IDE中运行/非在IDE中运行的说明,因此实际上哪种形式的指令最适合您的使用情况。

最新更新