Конфигурация Logback.xml в зависимости от среды - PullRequest
0 голосов
/ 27 февраля 2019

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

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

enter image description here

1 Ответ

0 голосов
/ 01 марта 2019

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

@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>
...