如果appender无法记录消息,我想抓住日志并使用“fallback appender”代替。这可能吗?
这样的东西(我知道STDOUT不会失败)
<appender name="APPENDER" class="ch.qos.logback.core.FooAppender">
<!-- whatever -->
</appender>
<appender name="FALLBACK_APPENDER" class="...FallbackAppender">
<failingAppender>APPENDER</failingAppender>
</appender>
答案 0 :(得分:0)
制作这项工作可能是一种粗鲁的方式如下。
假设您的appender在com.kp.logback包中。
你有自定义appender进行一些处理并登录某个文件/ db。在做这个操作时失败了。你可以记录这些消息,如下所示。
public class KPAppender extends UnsynchronizedAppenderBase<ILoggingEvent>{
private static final Logger LOG = LoggerFactory.getLogger(KPAppender.class);
@Override
protected void append(ILoggingEvent eventObject) {
//try something here to process message
if fails catch block Log message
if(eventObject.getLevel()== Level.DEBUG){
LOG.debug(eventObject.getMessage());
}
}
}
使用loback.xml配置创建另一个Fallback appender,如下所示。
<appender name="FALLBACK_APPENDER" class="...FallbackAppender">
</appender>
<logger name="com.kp.logback">
<level value="trace" />
<appender-ref ref="FALLBACK_APPENDER" />
</logger>