Как использовать несколько конфигураций с логбэком в одном проекте?

Конфигурационный файл для логбэка находится в пути к классам и, следовательно, зависит от проекта Eclipse, чего я не хочу. Я использую несколько утилит Java, все они находятся в одном проекте (это разделяет путь к классам), и мне нужно использовать определенную конфигурацию для некоторых из них.

Я пробовал замену переменных и конфигуратор Joram, но у меня ничего не работало. Скорее всего, это была моя вина, и однажды я решу ее,но пока мне нужно простое решение.

43
задан maaartinus 14 July 2011 в 20:30
поделиться

1 ответ

Я использовал другую опцию на основе блог 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>
0
ответ дан 26 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: