Tomcat7 使用 Logging

專案有需要產生 Log 檔案的需求,以便未來服務發生錯誤有個記錄,所以又要看看 Tomcat7 是如何產生 Log。Tomcat7 預設使用 java.util.logging,目前開發的功能很小,就不打算要另外安裝 log4j,才不會每台機器要裝一次 log4j,PG 兼 SA 就只好挑重點做。

1) 程式碼取得 Logger

Logger logger = Logger.getLogger("com.xyz.foo");

2) 程式碼中使用 Logger

logger.info("Hi!");

3) 替專案設定 Handler

到 ${專案路徑}/WebContent/WEB-INF/classes/ 下,新增或編輯 logging.properties,加入 Handler 並設定相關資訊,是要用 Console 還是要 File,等級多少要印出來。

logging.properties

4) 替專案設定 Logger

通過 Logger Level 的訊息才傳給上一步設定的 Handler。

經過測試,有點討厭的是,Logger 要到負責啟動專案的 JRE 上來設定才有作用。以我使用 macbook 舉例,編輯  Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/logging.properties,拉到最下面可以替 Logger 設定等級。

比如你專案中取得 Logger 是用

Logger.getLogger("com.xyz.foo");

那你可以在此新增

com.xyz.foo.level = FINE

這樣專案中透過 com.xyz.foo Logger,訊息的等級是 FINE 以上才會送給 Handler。而在 logging.properties 可以發現預設的 Logger Level 是 INFO。

.level = INFO

補充

JAVA Logging Level

SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST

Log 輸出

一條 Log 會
  • 第一關,先檢查 Logger Level 後才送到 Handler。
  • 第二關,再檢查 Handler Level 才決定是否要印在螢幕或是檔案上。
我個人習慣是
  • Handler Level 開到 FINEST(第二關永遠放行)。
  • 然後用 Logger Level 來決定是否要印在螢幕或是檔案上(第一關卡控)。
  • 如此,只要檢查 Logger Level 就能判斷會不會被印出來。

0 則回應: