2012-04-02 112 views
2

我正在研究在我的應用程序中使用JavaScript日誌框架。log4javascript - 以編程方式獲取消息的歷史記錄?

我很喜歡log4javascript(http://log4javascript.org/)的外觀,但我有一個要求,我不確定它滿足。

我需要能夠向框架詢問所有已記錄的消息。

也許我可以使用不可見的InPageAppender(http://log4javascript.org/docs/manual.html#appenders)登錄到DOM元素,然後從該DOM元素中刪除消息 - 但看起來很重。

也許我需要寫我自己的「InMemoryAppender」?

回答

3

在log4javascript的單元測試中使用了ArrayAppender,它將所有收到的日誌消息存儲在可通過其logMessages屬性訪問的數組中。希望它會出現在下一個版本的主要發行版中。這裏是一個獨立的實現:

var ArrayAppender = function(layout) { 
    if (layout) { 
     this.setLayout(layout); 
    } 
    this.logMessages = []; 
}; 

ArrayAppender.prototype = new log4javascript.Appender(); 

ArrayAppender.prototype.layout = new log4javascript.NullLayout(); 

ArrayAppender.prototype.append = function(loggingEvent) { 
    var formattedMessage = this.getLayout().format(loggingEvent); 
    if (this.getLayout().ignoresThrowable()) { 
     formattedMessage += loggingEvent.getThrowableStrRep(); 
    } 
    this.logMessages.push(formattedMessage); 
}; 

ArrayAppender.prototype.toString = function() { 
    return "[ArrayAppender]"; 
}; 

使用例:

var log = log4javascript.getLogger("main"); 
var appender = new ArrayAppender(); 
log.addAppender(appender); 
log.debug("A message"); 
alert(appender.logMessages); 
+0

真棒,感謝蒂姆。期待下一個版本。在此期間,我做了一些家庭烘焙和非常輕量級的東西。 – dbruning 2012-04-03 02:37:02

相關問題