У меня есть этот файл 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. Извините за это
Вы, возможно, имеете в виду 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>
На самом деле все работает, как и было задумано: при замене переменных логбэк вообще не считывает переменные окружения. Цитируя документацию :
Значение подставленной переменной может быть определено в самом файле конфигурации, во внешнем файле свойств или как системное свойство.
Итак, либо используйте одно из указанных решений, либо получите OSC_HOME_IS_UNDEFINED
:)