Micronaut настраивает приложения регистратора в зависимости от среды

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


person Luis Trigueiros    schedule 21.07.2019    source источник
comment
На самом деле это связано не с Micronaut, а с библиотекой журналов, с которой вы работаете, верно?   -  person x80486    schedule 23.07.2019
comment
Что ж, если откат поддерживается для условного включения приложения журнала на основе какой-либо переменной среды, это также сработает, я проверю это, спасибо. Первоначально я стремился решить эту проблему с помощью Micronaut, потому что Micronaut может определить, работает ли он в облаке AWS или нет.   -  person Luis Trigueiros    schedule 23.07.2019
comment
У вас также может быть несколько файлов конфигурации файлов в соответствии со средой (средами), и позже вы можете указать Micronaut прочитать их из определенного / заранее определенного места.   -  person x80486    schedule 23.07.2019
comment
Спасибо, на самом деле нашел одно решение, условную конфигурацию в логбэке, stackify.com/logging-logback   -  person Luis Trigueiros    schedule 23.07.2019
comment
Вы пробовали -Dlogback.configurationFile=logback-dev.xml в качестве параметров ВМ?   -  person Jorge    schedule 03.08.2019


Ответы (3)


Вы можете изменить конфигурационный файл журнала по умолчанию, используя системную переменную logback.configurationFile.

java -Dlogback.configurationFile=logback-prod.xml -jar your.jar

Но если вам нужна возможность использовать переменную env, вы можете сделать это без использования сторонней библиотеки:

  1. Переопределите системную переменную logback внутри основного класса micronaut перед вызовом main, как показано ниже

     @Singleton
     public class MyMicronautApplication  {
    
         public static void main(String[] args) {
             var env = System.getenv("MICRONAUT_ENVIRONMENTS");
    
             if (env != null && !env.isEmpty()) {
                 System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "logback-" + env + ".xml");
             }
    
             Micronaut.run(TesabizqrApplication.class);
    
         }
     }
    
  2. создайте настраиваемый файл конфигурации журнала на основе env, например: logback-dev.xml, и поместите в каталог ресурсов.

  3. набор env var MICRONAUT_ENVIRONMENTS = dev в соответствии с вашей логикой развертывания.

  4. наслаждайтесь использованием logback-dev.xml, logback-prod.xml, logback-stagging.xml и т. д.

person eriknyk    schedule 24.03.2021

Работа, которую я обнаружил, заключалась в выполнении условных выражений в логбэке. Вам понадобится следующая зависимость

<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.1.2</version>
</dependency>

Затем в вашем logback.xml файле вы можете сделать условный оператор, например следующий, для выбора приложения, которое вы хотите использовать, на основе профиля микронавта. В моем случае я хотел активировать приложение STDOUT, если я запускал приложение локально, но я не хотел активировать профиль STDOUT, если приложение работало в любой другой среде, такой как профили dev или prod, вместо этого я хотел RSYSLOG appender быть использованным.

    <root level="info">
        <if condition='property("MICRONAUT_ENVIRONMENTS").contains("local")'>
            <then>
                <appender-ref ref="STDOUT"/>
            </then>
            <else>
                <appender-ref ref="RSYSLOG"/>
            </else>
        </if>
    </root>

Вы можете использовать условные операторы для настройки других свойств в вашем файле регистрации.

person patelb    schedule 18.05.2020
comment
Я считаю, что это самое чистое решение, так как логбэк поддерживает условия if. - person Traycho Ivanov; 28.07.2020

Насколько я понимаю, в Micronaut нет такой же функции, как Spring boot (). Я думаю, что logback-production.xml (где production - это профиль) тоже не работает - поддерживаются только logback.xml и logback-test.xml.

person Krabi    schedule 30.07.2019