Я хотел бы настроить приложение для ведения журнала в зависимости от среды, например, во время работы в производственной среде я хотел бы настроить приложение, которое отправляло бы журнал в elasticsearch, но во время тестирования или в режиме разработки это приложение не будет включено.
Micronaut настраивает приложения регистратора в зависимости от среды
Ответы (3)
Вы можете изменить конфигурационный файл журнала по умолчанию, используя системную переменную logback.configurationFile.
java -Dlogback.configurationFile=logback-prod.xml -jar your.jar
Но если вам нужна возможность использовать переменную env, вы можете сделать это без использования сторонней библиотеки:
Переопределите системную переменную 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); } }
создайте настраиваемый файл конфигурации журнала на основе env, например: logback-dev.xml, и поместите в каталог ресурсов.
набор env var MICRONAUT_ENVIRONMENTS = dev в соответствии с вашей логикой развертывания.
наслаждайтесь использованием logback-dev.xml, logback-prod.xml, logback-stagging.xml и т. д.
Работа, которую я обнаружил, заключалась в выполнении условных выражений в логбэке. Вам понадобится следующая зависимость
<!-- 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>
Вы можете использовать условные операторы для настройки других свойств в вашем файле регистрации.
Насколько я понимаю, в Micronaut нет такой же функции, как Spring boot (). Я думаю, что logback-production.xml (где production - это профиль) тоже не работает - поддерживаются только logback.xml и logback-test.xml.
Micronaut
, а с библиотекой журналов, с которой вы работаете, верно? - person x80486   schedule 23.07.2019-Dlogback.configurationFile=logback-dev.xml
в качестве параметров ВМ? - person Jorge   schedule 03.08.2019