Группировка Appenders в Logback?

У меня два приложения. Один из них — приложение БД, а другой — SMTPAppender. Когда я регистрирую строку со специальным маркером, я хочу использовать как мой собственный аппендер базы данных, так и SMTPAppender. Однако я не хочу каждый раз определять два приложения следующим образом:

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</logger>

Мне нужна специальная ссылка, которая выглядит так:

<appender-group ref="CUSTOM_COMBO">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</appender-group>

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_COMBO"/>
</logger>

Он должен вызывать CUSTOM_DB и CUSTOM_EMAIL. Как я могу сделать это в Logback с помощью slf4j?


person kamaci    schedule 14.06.2013    source источник
comment
Прохладный запрос функции. Я не думаю, что это существует в журнале. Вы можете поместить кучу приложений в корневой регистратор и установить флаг аддитивности на true.   -  person Sotirios Delimanolis    schedule 14.06.2013
comment
Какова связь между регистраторами и маркерами в вашем случае использования?   -  person Ceki    schedule 14.06.2013
comment
@Ceki Я хочу, чтобы маркер начинался с CUSTOM. Я буду регистрировать с помощью маркера, такого как CUSTOM.DB, CUSTOM.EMAIL и т. д. Я хочу, чтобы в моем приложении сопоставлялся шаблон, который будет проверять, что любой заданный маркер начинается с CUSTOM. или нет. Если он начинается с CUSTOM. а приложение CUSTOM_DB будет записывать в БД, если оно начинается с CUSTOM. и приложение CUSTOM_EMAIL отправит электронное письмо. Вот почему я хочу добавить группу. С другой стороны, если я могу написать пользовательскую группу приложений и внутри нее, если я могу сопоставить шаблон, например, MARKER начинается с CUSTOM. или нет это будет еще одна классная вещь.   -  person kamaci    schedule 15.06.2013
comment
Мне все еще не ясно, чего вы хотите. Можно еще уточнить вопрос?   -  person David Roussel    schedule 19.06.2013
comment
Я хочу сделать ссылку в логическую группу приложений вместо одного приложения.   -  person kamaci    schedule 28.07.2013
comment
Почему вы устанавливаете аддитивность в false, разве вам не нужен корень с обоими приложениями?   -  person andygavin    schedule 30.07.2013


Ответы (2)


Итак, с https://tersesystems.com/blog/2019/05/27/application-logging-in-java-part-5/

public class CompositeAppender<E> extends UnsynchronizedAppenderBase<E> implements AppenderAttachable<E> {

    protected AppenderAttachableImpl<E> aai = new AppenderAttachableImpl<E>();

    @Override
    protected void append(E eventObject) {
        aai.appendLoopOnAppenders(eventObject);
    }

    // AppenderAttachable API delegates to aai in all cases
}

и

<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%-5level] %logger{15} -  message%n%xException{10}</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>file.log</file>
        <encoder>
            <pattern>%date - %message</pattern>
        </encoder>
    </appender>

    <appender name="CONSOLE_AND_FILE" class="com.tersesystems.logback.CompositeAppender">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </appender>

    <root level="TRACE">
        <appender-ref ref="CONSOLE_AND_FILE"/>
    </root>
</configuration>
person Will Sargent    schedule 28.05.2019

Похоже, вам нужно написать свой собственный CompoundAppender. Подробная информация о том, как написать собственный добавление, находится по адресу http://logback.qos.ch/manual/appenders.html.

person Eric Stein    schedule 01.08.2013