我是Logback的新手,我正在尝试使用属性文件为Windows和Linux动态添加文件路径。
以下是我的代码sinppet,如何获取$ {MY_HOME}的值
<appender name="SERVER_FILE" class="ch.qos.logback.core.FileAppender">
<file>${MY_HOME}/server.log</file>
<append>true</append>
<encoder>
<pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
答案 0 :(得分:6)
通常这是一个系统属性,有一些答案可以触及,但只提供答案的一部分。这些是:
但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;
}
}