兩種增強Eclipse日誌功能的方法
為什麼要採用日誌?
良好的開發人員都知道精心設計、測試和調試的重要性。雖然 Eclipse 可以協助開發人員實現這些任務,但是它怎樣處理日誌呢?很多開發人員相信對於良好的軟體開發實踐來說,日誌是不可或缺的一部分。如果您曾經修正過他人部署過的程式,您無疑也會同意這一點。幸運的是,日誌對於效能的影響很小,大部分情況下甚至根本不會對效能產生任何影響,而且由於日誌工具非常簡單易用,因此學習曲線也非常平滑。因此,對於現有的優秀工具,我們沒有理由不在應用程式中添加日誌功能。
可以使用的工具
如果您正在編寫一個 Eclipse 外掛程式,那麼您可以使用 org.eclipse.core.runtime.ILog 所提供的服務,它可以通過 Plug 類的 getLog() 方法進行訪問。只需要使用正確的資訊建立一個 org.eclipse.core.runtime.Status 的執行個體,並調用 ILog 的 log() 方法即可。
這個日誌對象可以接收多個日誌監聽器執行個體。Eclipse 添加了兩個監聽器:
一個監聽器向 "Error Log(錯誤記錄檔)" 視圖中寫入日誌。
一個監聽器向位於 “${workspace}/.metadata/.log" 的記錄檔中寫入日誌。
您也可以建立自己的日誌監聽器,只需實現 org.eclipse.core.runtime.ILogListener 介面並使用 addLogListener() 方法將其添加到日誌對象中即可。這樣,每個日誌事件都可以調用這個類的 logging() 方法。
雖然所有的內容都非常簡單,但是這種方法存在一些問題。如果您希望修改一個已部署好的外掛程式目標,那麼應該如何處理?或者說要如何控制記錄下來的日誌資訊的數量?還有,這種實現可能會對效能造成影響,因為它總是要向所有的監聽器發送日誌事件。這就是為什麼我們通常只在極端的情況(例如錯誤條件)中才會看到要記錄日誌的原因。
另一方面,還有兩個專門用於日誌的傑出的工具。一個來自 Java 2 SDK 1.4 的 java.util.logging 包;另外一個來自 Apache,名為 Log4j。
這兩個工具都採用了日誌對象的階層的概念,都可以將日誌事件發送到任意數目的處理常式(Handler,在 Log4j 中稱為 Appender)中,它代表了發送給格式化程式(Formatter,在 Log4j 中稱為 Layout)進行格式化的訊息。這兩個工具都可以通過屬性檔案進行配置。Log4j 還可以使用 xml 檔案進行配置。
記錄器可以有一個名稱並與某一層級相關聯。記錄器可以繼承父母的設定(層級,處理常式)。名為“org”的記錄器會自動成為另外一個名為 “org.eclipse” 的記錄器的父母;因此不管您在設定檔中怎樣對“org”進行設定,這些設定都可以被“org.eclipse”記錄器繼承。
我更喜歡哪一個工具?這兩個工具我都曾經用過,不過我比較喜歡 Log4j。只有在非常簡單的程式中我才使用 java.util.logging,我並不想在這樣的程式中添加 log4j.jar。關於這兩個工具的詳細介紹,請參閱 Java 文檔和 Apache 的網站。
一種改進的日誌
如果存在改進 Eclipse 日誌體驗的方法,那不是很棒嗎?但這樣做有兩個問題:
缺少外部設定檔。
效能問題,同時還有缺乏對日誌行為進行細粒度控制。