2012-08-29 48 views
3

這可能是一個非常愚蠢的問題,但我似乎無法找到答案。我有一個Tomcat的自定義領域,在上下文級別使用。我想登錄失敗和成功登錄。從自定義Tomcat領域記錄

是否有某種方式爲我指定一個文件,或者獲得現有文件的參考,這將讓我寫,從該領域的身份驗證功能,裏面明確的日誌行呢?

我試圖建立一個log4j的文件和文件JUL並調用getLogger並試圖寫它,沒有運氣。我也嘗試過getLogger(「catalina」),希望能夠訪問內部日誌記錄過程,但也沒有運氣。從那裏得到任何幫助?

回答

0

請問您的自定義域擴展org.apache.catalina.realm.RealmBase

有一個受保護的屬性org.apache.catalina.realm.RealmBase.containerLog(它是org.apache.juli.logging.Log的一個實例),您將有權訪問該屬性。這似乎是登錄許多org.apache.catalina.realm.*實現的方法。

0

使用containerLog證明非常簡單。

的好處是,您可以利用服務器日誌記錄配置,在Tomcat中7,在使用巨力特別好(如在公共記錄的改善)。

我不喜歡的唯一的事情就是API是公共的日誌記錄,不那麼友好爲SLF4J的實例。 但是你也可以在log4j上配置slf4j,在這種情況下,你必須在tomcat/lib中添加JAR文件,這樣父類裝載器在實例化你的領域時就可以看到它們。

一件事,你需要注意:不要登錄境界構造的東西!我必須做一些自定義初始化(加載一個自定義文件),我添加了一些基本的日誌記錄,並以一個討厭的NullPointer結束 - containerLog不是在構造函數中初始化的,而是在initInternal()方法中初始化的。重寫這個,確保你調用了初始化記錄器的super.initiInternal(),然後你去了。