2014-04-09 78 views
0

訪問方法我有一個自定義的appender,增加了LoggingEvent s到的LoggingEventArrayList,具體如下:log4j的:定製的appender和記錄器實例

import java.util.ArrayList; 

import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.spi.LoggingEvent; 

public class PayloadLogAppender extends AppenderSkeleton { 
    private final ArrayList<LoggingEvent> eventsList = new ArrayList(); 
    @Override 
    protected void append(LoggingEvent event) { 
     eventsList.add(event); 
    } 

    public void close() { 
    } 
    public boolean requiresLayout() { 
     return false; 
    } 
    public ArrayList<LoggingEvent> getAllMessages() { 
     return this.eventsList; 
    } 
} 

我已經添加了自定義的appender到我的log4j的。屬性,它被罰款加載:

log4j.appender.payloadLog=PayloadLogAppender 

現在我的應用程序裏面我訪問通常的方式記錄儀,使用getLogger(), 但最後我想有事件列表中保持名單。我在appender中創建了方法getAllMessages(),並且想要在持有記錄器實例時調用此方法。是否需要logger.getAllMessage()才能獲得eventsList屬性的參考?

+0

當你在最後使用logger.getAllMessages時,你會看到什麼? – bgth

+0

我得到這個: 引起:java.lang.Error:未解決的編譯問題: \t方法getAllMessages()未定義類型記錄器 –

回答

0

我能得到這個工作有以下幾點:

import mypackage.PayloadLogAppender; 

// in the method that gets triggered at the end. 
this.LOGGER = Logger.getRootLogger(); 
Appender payloadlog = this.LOGGER.getAppender("payloadLog"); 
System.out.println("My list of logging events" + ((PayloadLogAppender) payloadlog).getAllMessage()); 

感謝您的指針。