專案有需要產生 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 > FINESTLog 輸出
一條 Log 會- 第一關,先檢查 Logger Level 後才送到 Handler。
- 第二關,再檢查 Handler Level 才決定是否要印在螢幕或是檔案上。
- Handler Level 開到 FINEST(第二關永遠放行)。
- 然後用 Logger Level 來決定是否要印在螢幕或是檔案上(第一關卡控)。
- 如此,只要檢查 Logger Level 就能判斷會不會被印出來。
0 則回應: