2014-03-04 36 views
1

如果appender未能記錄消息,我想抓住日誌並使用「fallback appender」代替。那可能嗎?在logback中創建一個後備appender?

像這樣的東西(我知道STDOUT不會失敗)

<appender name="APPENDER" class="ch.qos.logback.core.FooAppender"> 
      <!-- whatever --> 
</appender> 

<appender name="FALLBACK_APPENDER" class="...FallbackAppender"> 
     <failingAppender>APPENDER</failingAppender> 
</appender> 

回答

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配置創建另一個後備appender。

<appender name="FALLBACK_APPENDER" class="...FallbackAppender"> 

    </appender> 

<logger name="com.kp.logback"> 
     <level value="trace" /> 
     <appender-ref ref="FALLBACK_APPENDER" /> 
    </logger>