Конфигурационный файл для логбэка находится в пути к классам и, следовательно, зависит от проекта Eclipse, чего я не хочу. Я использую несколько утилит Java, все они находятся в одном проекте (это разделяет путь к классам), и мне нужно использовать определенную конфигурацию для некоторых из них.
Я пробовал замену переменных и конфигуратор Joram, но у меня ничего не работало. Скорее всего, это была моя вина, и однажды я решу ее,но пока мне нужно простое решение.
Я использовал другую опцию на основе блог 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>