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

use*_*383 3 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> 
Run Code Online (Sandbox Code Playgroud)

and*_*vin 6

通常这是一个系统属性,有一些答案触及这个但只提供答案的一部分.这些是:

配置手册显示该机制非常灵活

与许多脚本语言一样,logback配置文件支持变量的定义和替换.变量可以在配置文件本身,外部文件,外部资源中定义,甚至可以在运行中计算和定义.

总之,您有许多选项可用于定义MY_HOME的值:

在文件中

您可以使用以下命令在文件本身中定义值:

<property name="MY_HOME" value="/home/myhome"/>
Run Code Online (Sandbox Code Playgroud)

在系统属性中

您可以安排将其设置为系统属性,最有可能是在启动JVM时.

java -DMY_HOME="/home/myhome" ...
Run Code Online (Sandbox Code Playgroud)

来自系统上的属性文件

您可以安排logback来读取属性文件:

<property file="/opt/example/instance_1/properties/system.properties" />
Run Code Online (Sandbox Code Playgroud)

从类路径

您可以使用类路径将属性文件写入资源目录或jar中,并将其作为资源读取.

<property resource="prod.properties" />
Run Code Online (Sandbox Code Playgroud)

使用属性定义器

您可以使用属性定义器来安排调用您的代码.例如:

<define name="MY_HOME" class="biz.nowhere.HomePropertyDefiner">
   <application>app</application>
</define>
Run Code Online (Sandbox Code Playgroud)

那个类就像(例如):

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

}
Run Code Online (Sandbox Code Playgroud)