2011-08-17 63 views
2

雖然核心log4j和slf4j庫帶有很多好東西,並且我可以構建自己的,但是我想知道是否有任何圖書館隨附有趣追加程序。是否有任何log4j或slf4j Appender框架提供額外的appenders

大多數appender似乎是提供某種連接到特定服務的橋樑,例如通過電子郵件發送消息或更新NT事件日誌。我正在考慮更抽象的記錄器,而不是中間件,但對現場系統的觀察者同樣有用。一個appender我認爲可能是有用

日誌記錄是通常是有用的,但它可以是一個痛苦由於,因爲相關的請求成功完成真正的arent必要消息的剪切體積

瘋狂的想法。一個想法是,只有記錄來自http請求的消息纔會有用,這些消息會在處理期間拋出一些異常。如果請求沒有失敗,那麼沒有東西會被添加到日誌中。自然這種appender需要一些東西來幫助控制它。

BufferControl { 
    FLUSH_NOW, // flush everything now in the buffer 
    FLLUSH, // flush everything when BufferingLogger.commit() is called. 
    CLEAR, // clear everything before 
    CLEAR_ALL; /// all past and future messages are ignored 
    IGNORE_AFTER; // ignore messages after this event. 
    IGNORE_BEFORE, // ignore messages before 
    CONTINUE, // just continue... 
    etc etc.. 
} 

// implements could tell the bufferingappender to log messages because some exception was thrown etc.  
LoggingEventWatcher { 
    BufferControl look(LoggingEvent, BufferingAppender); 
} 

// every logging event is passed to the logging event watcher which 
BufferingAppender { 
    start(); 
    reset(); // throw away everything in the buffer 
    commit(); // use returned BufferControl to flush or reset etc. 
    flush(); // unconditionally flush all messages now. 
} 

想象一下,如果只有在記錄某個異常時才能記錄所有消息。需要一個控制器來標記日誌記錄事務的開始,以及是否根據某些條件清除或刷新。

當然有些智能將需要重置緩衝區等。

+0

你說的是什麼樣的追加程序的?另外slf4j是不同日誌框架之間的接口,比如commons-logging,log4j等。 – khmarbaise

+0

我不太明白你想要什麼:如果你寫一些你所描述的智能邏輯,那麼爲什麼要限制自己到一個(或兩個) Java日誌框架?這些功能應該存在於某些日誌記錄後端(NT事件日誌,日誌的數據庫存儲...)中,應用程序應該將它們的日誌數據推送到該日誌中。 –

+0

@js我不在乎哪個f/w提供給我appenders,因爲它很有可能使用slf4j作爲兩者之間的橋樑。我無論如何都在做更多性感的玩家之後。 –

回答

4

Logback是slf4j實現提供大量可配置的appender。 http://logback.qos.ch/

它提供了基於上下文的日誌記錄,事件和對日誌事件的廣泛過濾。 您可以毫不費力地擴展自己的基本過濾器以滿足您的需求。

詳情點擊這裏: http://logback.qos.ch/manual/filters.html

+0

過濾器不能識別對話,它們只能處理單個消息/事件。 –

+0

但我認爲實現這一點相當容易。只需擴展現有的appender,使其緩衝輸出,然後寫入或清除它。投入上下文感知(http://logback.qos.ch/manual/loggingSeparation.html),這可能與請求有關... –

+0

@JW,我知道我可以寫一切myuself,但是這打敗了尋求福斯的好處庫。 –

相關問題