Logback с использованием Springboot, не принимающим переменные среды

Я пытаюсь использовать переменную среды ($mode) в моем logbook-spring.xml, как показано ниже, но logback не может ее прочитать:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="30 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <property name="LOG_PATH" value="../logs/${mode}"/>
    <property name="LOG_ARCHIVE" value="${LOG_PATH}/archive"/>
    <timestamp key="timestamp-by-second" datePattern="yyyyMMdd'T'HHmmss"/>
    <timestamp key="timestamp-by-day" datePattern="yyyyMMdd"/>
    <appender name="Trace-Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/emrTrace_${mode}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_ARCHIVE}/emrTrace_${mode}.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%t] %msg%n</pattern>
            <outputPatternAsHeader>true</outputPatternAsHeader>
        </encoder>
    </appender>
    <logger name="com.itreatmd.emr.Debug" level="finest" additivity="false">
        <appender-ref ref="Trace-Appender"/>
    </logger>
</configuration>

Я запускаю исполняемый файл jar как:

java -jar EmrServices-1.0-SNAPSHOT.jar --mode=prod

Для свойства «LOG_PATH» установлено значение «logs/mode_IS_UNDEFINED».

Таким образом, когда я перебираю переменные среды в программе, я вижу «режим» среди переменных. Это означает, что приложение знает о переменной. Но судя по всему, логбэка нет.

Я использую Spring 2.1.10. Я не видел этой проблемы в более старых версиях Springboot (1.3)

Изменить: я думаю, что причина этого в том, что журнал инициализируется до Spring, но я понятия не имею, что я могу с этим поделать.


person Aamir Quraishi    schedule 09.12.2019    source источник


Ответы (1)


Добавьте следующее свойство в конфигурацию вашего logback.xml.

<property resource="application.properties" />

Или альтернативно

<springProperty name="mode" source="mode"/>
person Sagar Ahuja    schedule 09.12.2019
comment
Нет, без разницы. Я не уверен, почему это так, поскольку я передаю параметры среды в командной строке (--mode = prod) - person Aamir Quraishi; 10.12.2019