通常这是一个系统属性,有一些答案涉及到这一点,但只提供了一部分答案。它们是:
但是configuration上的手册显示该机制相当灵活
与许多脚本语言一样,logback 配置文件支持变量的定义和替换。变量可以在配置文件本身、外部文件、外部资源中定义,甚至可以动态计算和定义。
总而言之,您有许多用于定义 MY_HOME 值的选项:
在文件中
您可以在文件本身中定义值:
<property name="MY_HOME" value="/home/myhome"/>
在系统属性中
您可以安排将其设置为系统属性,很可能在您启动 JVM 时进行。
java -DMY_HOME="/home/myhome" ...
来自系统上的属性文件
您可以安排 logback 读取属性文件:
<property file="/opt/example/instance_1/properties/system.properties" />
来自类路径
您可以使用类路径将属性文件写入资源目录或 jar 并将其作为资源读出。
<property resource="prod.properties" />
使用属性定义器
您可以通过使用属性定义器来安排调用您的代码。例如:
<define name="MY_HOME" class="biz.nowhere.HomePropertyDefiner">
<application>app</application>
</define>
那个类是这样的(例如):
public class HomePropertyDefiner extends PropertyDefinerBase {
private String application;
@Override
public String getPropertyValue() {
return String.format("/opt/%s/%s", application, MyInstanceManager.instancePath());
}
public void setApplication(String application) {
this.application = application;
}
}