你能解释一下这个 Spring 环境变量解析吗?
Can you explain this Spring environment variable resolution?
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}
这行吗? -
有什么用?
与 Bash 一样,Logback 使用 :-
作为其默认值运算符。有问题的行正在设置 LOG_FILE
属性:
- 如果
LOG_FILE
已经设置,使用
- 否则,如果设置了
LOG_PATH
,则使用后缀为spring.log
- 否则,如果设置了
LOG_TEMP
,则使用后缀为/spring.log
- 否则,如果设置了
java.io.tmpdir
,则使用后缀为/spring.log
- 否则使用
/tmp/spring.log
与Spring无关。
Logback XML 配置本身有这种占位符处理,可以用变量替换占位符。 logback 中占位符的语法是 ${VARNAME}
,如果 VARNAME
不存在,如果你想要默认值,你可以通过 ${VARNAME:-DEFAULT}
来实现(参考:Logback Configuration)。是的, a:-
,后面跟默认值
那你引用的就很容易理解了:
${LOG_FILE:- }
${LOG_PATH:- }spring.log
${LOG_TEMP:- }/
${java.io.tmpdir:- }
/tmp
(你真的需要解释上面的意思吗?)
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}
这行吗? -
有什么用?
与 Bash 一样,Logback 使用 :-
作为其默认值运算符。有问题的行正在设置 LOG_FILE
属性:
- 如果
LOG_FILE
已经设置,使用 - 否则,如果设置了
LOG_PATH
,则使用后缀为spring.log
- 否则,如果设置了
LOG_TEMP
,则使用后缀为/spring.log
- 否则,如果设置了
java.io.tmpdir
,则使用后缀为/spring.log
- 否则使用
/tmp/spring.log
与Spring无关。
Logback XML 配置本身有这种占位符处理,可以用变量替换占位符。 logback 中占位符的语法是 ${VARNAME}
,如果 VARNAME
不存在,如果你想要默认值,你可以通过 ${VARNAME:-DEFAULT}
来实现(参考:Logback Configuration)。是的, a:-
,后面跟默认值
那你引用的就很容易理解了:
${LOG_FILE:- }
${LOG_PATH:- }spring.log
${LOG_TEMP:- }/
${java.io.tmpdir:- }
/tmp
(你真的需要解释上面的意思吗?)