如何在logback.xml中使用变量设置根日志级别?

How to use a variable to set the root log level in logback.xml?

我正在尝试使用环境变量 ROOT_LOG_LEVEL 来控制使用 logback.xml 配置文件的项目的根日志级别。

<configuration>
  <!-- You can override these with environment variables -->
  <variable name="ROOT_LOG_LEVEL" value="$ROOT_LOG_LEVEL:-INFO" />
  <variable name="EXAMPLE_LOG_LEVEL" value="$EXAMPLE_LOG_LEVEL:-INFO" />

  <logger name="com.example" level="$EXAMPLE_LOG_LEVEL" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%level - %message</pattern>
    </encoder>
  </appender>

  <root level="$ROOT_LOG_LEVEL">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

使用此配置,我可以通过设置环境变量(例如 EXAMPLE_LOG_LEVEL=TRACE)或不设置变量并回退到默认 com.example 包的日志级别=16=].

虽然这适用于 com.example,但不适用于根记录器。当我尝试在 level="$ROOT_LOG_LEVEL" 中使用变量时,无论变量的内容如何,​​它都会退回到内部默认值 DEBUG。仅当我将 $ROOT_LOG_LEVEL 替换为 INFO 等显式值时,根记录器才会更改。

有没有办法根据变量设置根日志级别?

显然,我的问题的答案是 Logback 不接受这样的变量:

<variable name="ROOT_LOG_LEVEL" value="$ROOT_LOG_LEVEL:-INFO" />
<root level="$ROOT_LOG_LEVEL">

改为使用:

<variable name="ROOT_LOG_LEVEL" value="${ROOT_LOG_LEVEL:-INFO}" />
<root level="${ROOT_LOG_LEVEL}">

行得通!请注意 :-INFO 必须在大括号内。