6

我有两个附加程序。其中之一是 DB appender,另一个是 SMTPAppender。当我用特殊标记记录一个字符串时,我想同时使用我的自定义 db appender 和 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。我如何使用 slf4j 在 Logback 中做到这一点?

4

2 回答 2

1

所以来自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>
于 2019-05-28T04:15:37.610 回答
0

看起来您需要编写自己的 CompoundAppender,有关如何编写自定义附加程序的详细信息位于http://logback.qos.ch/manual/appenders.html

于 2013-08-01T13:17:14.680 回答