【问题标题】:Can you explain this Spring environment variable resolution?你能解释一下这个 Spring 环境变量解析吗?
【发布时间】:2016-06-01 18:50:59
【问题描述】:

Spring Boot docs 具有以下示例日志记录文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

你能帮我理解${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}这行吗? - 是干什么用的?

【问题讨论】:

    标签: spring spring-mvc spring-boot environment-variables logback


    【解决方案1】:

    与 Bash 一样,Logback 使用 :- 作为其默认值运算符。有问题的行是设置LOG_FILE 属性:

    • 如果 LOG_FILE 已设置,请使用它
    • 否则,如果设置了LOG_PATH,则使用后缀为spring.log
    • 否则,如果设置了LOG_TEMP,则使用以/spring.log为后缀的那个
    • 否则,如果设置了java.io.tmpdir,则使用以/spring.log为后缀的那个
    • 否则使用/tmp/spring.log

    【讨论】:

    • 您引用的逻辑与代码的实际含义有些不同。例如对于第 2 点,它应该以spring.log 为后缀,而不是/spring.log。第 4 点类似
    • 好收获。固定的。谢谢。
    • 感谢使用 if-else 的解释。我不认为@adrian 的观点是正确的。 LOG_PATHLOG_TEMPjava.io.tempdir 都是目录,为了将文件放在这些目录中,后缀必须是 /spring.log,而不是 spring.log
    • @AbhijitSarkar 我不知道这些变量中存储了什么。我所说的只是基于所引用的表达方式。这可能看起来不合理,但这不是我关心的问题。
    • 当你通过application.properties中的logging.file属性将LOG_FILE设置为“myapp.log”时,除了myapp.log之外,Spring还在使用/tmp/spring.log
    【解决方案2】:

    与Spring无关。

    Logback XML 配置本身具有这种占位符处理,可以用变量替换占位符。 logback 中占位符的语法是${VARNAME},如果你想要默认值,如果VARNAME 不存在,你可以通过${VARNAME:-DEFAULT} 来实现(参考:Logback Configuration)。是的,:-,后面跟着默认值。

    那么你引用的内容就很容易理解了:

    ${LOG_FILE:-                                                             }
                ${LOG_PATH:-                                      }spring.log
                            ${LOG_TEMP:-                        }/
                                         ${java.io.tmpdir:-    }
                                                           /tmp
    

    (你真的需要解释上面的意思吗?)

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多