Считайте переменные среды из logback конфигурационного файла

У меня есть этот файл logback.xml:

<configuration debug="true" scan="true" scanPeriod="60 seconds">

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${MY_HOME}/logs/mylog.log</File>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>logs/my.%d{yyyy-MM-dd}.log</FileNamePattern>
      <MaxHistory>30</MaxHistory>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level - %msg%n</Pattern>
    </layout>

  </appender> 

  <root level="TRACE">
    <appender-ref ref="FILE"/>
  </root>

</configuration>

И ${MY_HOME} определенная системная переменная (echo $MY_HOME на Linux показывает корректный путь).

Вещь состоит в том, что logback, кажется, не читает его правильно, это хранит журналы под MY_HOME_IS_UNDEFINED/logs/my.log

Что я делаю неправильно? Большое спасибо!

Править: Я сделал ошибку и поместил OSC_HOME, где я действительно имел в виду MY_HOME. Извините за это

59
задан Pablo Fernandez 29 December 2009 в 19:20
поделиться

2 ответа

Вы, возможно, имеете в виду MY_HOME . В вашем конфигурационном файле есть ссылка на OSC_HOME. Подробности смотрите в правилах Variable substitution Logback.

Вы можете передать переменную окружения в качестве свойства Java-системы, после чего Logback выполнит подстановку переменной. Вы можете передать ее в качестве опции JVM в вашей командной строке. Например:

java -DMY_HOME=${MY_HOME} -cp ... MainClass

Или вы можете определить MY_HOME в самом файле конфигурации.

<configuration debug="true" scan="true" scanPeriod="60 seconds">
  <property name="MY_HOME" value="/home/my" />
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${MY_HOME}/logs/mylog.log</File>
  </appender> 
</configuration>
12
ответ дан 24 November 2019 в 18:28
поделиться

На самом деле все работает, как и было задумано: при замене переменных логбэк вообще не считывает переменные окружения. Цитируя документацию :

Значение подставленной переменной может быть определено в самом файле конфигурации, во внешнем файле свойств или как системное свойство.

Итак, либо используйте одно из указанных решений, либо получите OSC_HOME_IS_UNDEFINED :)

.
-3
ответ дан 24 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: