Конфигурация logback.xml по среде

У меня есть конфигурация логбэка, как показано ниже, как вы можете видеть, у меня есть приложение, которое добавляет все журналы в автономную службу ведения журналов.

<appender name="digitalGelfAppender" 
 class="de.siegmar.logbackgelf.GelfUdpAppender">
    <graylogHost>testserver.loggingservice.com</graylogHost>
    <graylogPort>1234</graylogPort>
    <useCompression>true</useCompression>
    <layout class="de.siegmar.logbackgelf.GelfLayout">
        <originHost>originHost</originHost>
        <includeRawMessage>false</includeRawMessage>
        <includeMarker>true</includeMarker>
        <includeMdcData>true</includeMdcData>
        <includeCallerData>false</includeCallerData>
        <includeRootCauseData>false</includeRootCauseData>
        <includeLevelName>false</includeLevelName>
        <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${log.pattern}</pattern>
        </shortPatternLayout>
        <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${log.pattern}</pattern>
        </fullPatternLayout>
        <staticField>application:DAP</staticField>
        <staticField>environment:UAT</staticField>
    </layout>
</appender>

<root level="#logback.loglevel#">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="digitalGelfAppender"/>
</root>

Мой вопрос в том, что мне нужно изменить

<graylogHost>testserver.loggingservice.com</graylogHost>
<graylogPort>1234</graylogPort>

по ценности окружающей среды. Таким образом, на рабочем сервере все будет так, как показано ниже.

<graylogHost>prodserver.loggingservice.com</graylogHost>
<graylogPort>prodPort</graylogPort>

Как я могу передать значение среды в файл logback.xml по среде? Я попытался добавить эти переменные и использовать их как свойство внутри xml. Это вообще не работает.

<property name="GRAYLOG_SERVER" value="${graylog-hostname}" />
<property name="GRAYLOG_SERVER_PORT" value="{graylog-port}" />

использование

<graylogHost>${GRAYLOG_SERVER}</graylogHost>
<graylogPort>${GRAYLOG_SERVER_PORT}</graylogPort>

введите описание изображения здесь


person Furkan    schedule 27.02.2019    source источник


Ответы (2)


Привет, я решил свою проблему, реализовав прослушиватель, который извлекает данные из системного параметра среды;

@Controller
public class LoggerContextListener extends ContextAwareBase implements 
LoggerContextListener, LifeCycle {


@Override
public void start() {   
                Map<String, String> property = System.getenv();
                Context context = getContext();
                context.putProperty("GRAYLOG_SERVER", property.get("graylog-hostname"));
                context.putProperty("GRAYLOG_SERVER_PORT", property.get("graylog-port"));
}

После этого я добавляю этого слушателя в качестве contextListener в файл lockback.xml.

<contextListener class="com.anadolusigorta.dap.config.DapLoggerContextListener"/> 

Тогда проблема решена! Теперь мой xml может использовать этот параметр, установленный из слушателя;

<graylogHost>${GRAYLOG_SERVER}</graylogHost>
<graylogPort>${GRAYLOG_SERVER_PORT}</graylogPort>
person Furkan    schedule 01.03.2019

Вам не нужно создавать слушателя. Достаточно использовать переменные окружения следующим образом.

 <graylogHost>${graylog-hostname}</graylogHost>
 <graylogPort>${graylog-port}</graylogPort>
person bmck    schedule 18.07.2020