1. 程式人生 > >log4j自定義appender實現,處理異常堆疊

log4j自定義appender實現,處理異常堆疊

在專案中需要自定義實現一個log4j的appender。根據log中MDC裡的資訊,構造日誌儲存的目錄結構。自定義實現log4j appender的方法已經介紹過了。主要是覆蓋AppenderSkeleton中的appender方法。

@Override
      protected void append(LoggingEvent event) {
           this .logEvent = event;
     }

日誌內容的獲取和格式處理,通過Layout進行格式化

this .getLayout().format(event).getBytes( DEFAULT_CS
)

這裡有個問題,一般情況下,我們常用的org.apache.log4j.PatternLayout是不會處理異常堆疊的。因為,其內部的方法,返回的是true。

public  boolean ignoresThrowable () {
    return true ;
  }

在這種情況,如果你的日誌裡有異常物件,如logger.error(“錯誤資訊。”, e) 那麼e將會被忽略。這時候需要我們自己處理。處理方式如下:

if (layout .ignoresThrowable()) {
      String[] s = event.getThrowableStrRep();
if (s != null ) { int len = s. length; for( int i = 0; i < len; i++) { // 處理異常堆疊,比如記錄到日誌檔案中 }