2010-04-09 58 views
1

我使用一個包裝類A的初始化java.util.logger程序的Java記錄儀使用Servlet

static class A { 

    public static Logger logger; 

    public static void init(){ 

    logger = Logger.getLogger("test"); 

} 

現在,到處都在我的節目,我叫A.init(),然後logger.log(「消息+ uniqid「)。 但最近我轉移到HTTP servlets,我遇到了問題。

基本上,如果一個應用程序已經在運行,並且記錄器記錄......和別人再次運行應用程序,從以前的實例記錄器停止,並開始記錄的第二個。任何人都可以有解決方案,我應該如何解決這個靜態變量問題?

我可以通過記錄到的所有構造函數的類但那是很乏味。任何更好的解決方案,將不勝感激..

+0

Didnt完全看你的問題,但我可以推薦你的log4j。 – DarthVader 2010-04-09 18:35:39

回答

0

是從來沒有使用上的web應用靜態的,什麼user177883說使用Log4j它是登錄狀態,這樣很好地解決何苦把它從頭

2

你不需要寫初始化您的記錄器多次。

實際上,您甚至不需要手動執行此操作,因爲您可以創建一個帶配置信息的屬性文件,並將其以部署到您的應用程序服務器中的WEB-INF/classes文件夾的方式放到特定目錄中。

在配置文件(properties-file)中,您可以定義不同的寫日誌方式。然後,當你想要寫一些Servlet記錄,例如UserCounterServlet,你應該做的:

private static final Logger logger = Logger.getLogger (UserCounterServlet.class); 
... 
logger.info("some info"); 
+0

但我希望將日誌寫入一個文件中......所以,我必須始終添加文件處理程序... – Sunny 2010-04-09 19:10:15

+0

您的日誌記錄程序配置文件進入WEB-INF/classes/log4j.xml。該文件會告訴你想記錄你的日誌中的文件的log4j 另外,我認爲這是稍微好一點的說'getLogger(UserCounterServlet.class);'因爲這時如果你犯了一個錯字,你的IDE會讓你知道。 – John 2010-04-10 02:32:18

+0

@John:關於UserCounterServlet.class - 你確定無疑是正確的。 – Roman 2010-04-10 07:42:48

0

如果你想在Servlet中真正的好記錄解決方案,不要用一個靜態的記錄(即使你知道一些着名的基於servlet的項目使用這種記錄方式)。使用時考慮到Web應用程序開發權記錄解決方案(例如的logback - log4j的提前,或者等等)