我有两个追加器。其中一个是数据库附加程序,另一个是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。如何使用slf4j在Logback上执行此操作?
最佳答案
所以从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>