Как я могу динамически (с помощью переменной env) активировать / деактивировать logback или applink? - PullRequest
0 голосов
/ 05 ноября 2018

есть ли способ выбрать, если я хочу иметь приложение для входа в систему или нет, через переменную окружения?

Я установил микросервис с загрузочной док-станцией и добавил стек ELK.
Пока все отлично.
Но теперь, если я хочу запустить свой сервис без стека ELK, приложение выдает ошибку, что оно не знает хост Logstash:

app | 10:09:23,537 |-ERROR in ch.qos.logback.classic.net.SyslogAppender[SYSLOG] - Could not create SyslogWriter java.net.UnknownHostException: logstash: Name or service not known
app |   at java.net.UnknownHostException: logstash: Name or service not known

Вот мой файл logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>logstash</syslogHost>
        <port>5000</port>
        <facility>LOCAL1</facility>
        <suffixPattern>[%thread] %logger %msg</suffixPattern>
    </appender>

    <root level="INFO">
        <appender-ref ref="SYSLOG"/>
    </root>

</configuration>

Я знаю, что это очень простая версия, но я новичок в ведении журнала со стеком logback / ELK.

Есть ли способ внедрить что-либо с помощью переменной окружения, например, в файлы yaml, например? active=${LOGBACK_ACTIVE:false} как я могу сделать это с помощью метрик Прометея?

1 Ответ

0 голосов
/ 05 ноября 2018

В вашем logback.xml вы можете использовать конструкцию <if> для включения приложения SYSLOG, когда присутствует именованный параметр JVM.

В следующем примере, если вы запускаете ваше приложение с -Dsyslog, тогда ваш SYSLOG аппендер будет задействован, в противном случае он будет проигнорирован, и будет активирован стандартный аппендер CONSOLE:

<if condition='isDefined("syslog")'>
  <then>
    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
      ...
    </appender>

    <root level="INFO">
      <appender-ref ref="SYSLOG" />
    </root>
  </then>
  <else>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      ...
    </appender>

    <root level="INFO">
      <appender-ref ref="CONSOLE" />
    </root>
  </else>
</if>

Это требует некоторого дублирования объявления root, но, поскольку вам необходимо условно предотвратить создание экземпляра экземпляра приложения SYSLOG * Я думаю, это может быть единственным вариантом.

...