如何在logback.xml中动态指定文件路径

时间:2015-09-15 21:13:12

标签: logback

我是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> 

1 个答案:

答案 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;
  }

}