Я использовал другую опцию, основанную на блоге Leonidas .Существует необязательный файл свойств (environment.properties), который содержит свойство среды и пользовательские конфигурации (например, logback-env-test.xml).Все эти файлы должны быть на пути к классам.
Если файл свойств существует и определяет свойство logEnv
, например,
logEnv = dev66
, logback пытается найти и включить пользовательскую конфигурацию из logback-env-dev66.xml
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</included>
В остальном это будет возврат к конфигурации по умолчанию (раздел <else>
).Обратите внимание, что тег <included>
использует вместо <configuration>
в пользовательских файлах конфигурации.
logback.xml для управления всеми вышеперечисленными вещами:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="true">
<!-- To skip error if property file doesn't exist -->
<define name="propExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>environment.properties</resource>
</define>
<if condition='${propExists}'>
<then>
<property resource="environment.properties" />
</then>
</if>
<!-- If specific configuration exists, load it otherwise fallback to default (<else> section) -->
<define name="confExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>logback-env-${logEnv}.xml</resource>
</define>
<if condition='${confExists}'>
<then>
<include resource="logback-env-${logEnv}.xml"/>
</then>
<else>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</else>
</if>
</configuration>