專案有需要產生 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#https://www.packtpub.com/books/content/introduction-logging-tomcat-7 | |
#http://tomcat.apache.org/tomcat-7.0-doc/logging.html | |
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler # 有 File 和 Console 兩個 Handler | |
############################################################ | |
# Handler specific properties. | |
# Describes specific configuration info for Handlers. | |
############################################################ | |
org.apache.juli.FileHandler.level = INFO | |
org.apache.juli.FileHandler.directory = ${catalina.base}/logs # 產生的檔案放在 Tomcat 的 log 資料夾下 | |
org.apache.juli.FileHandler.prefix = foo. # 檔案產生的前綴名稱,這裡就是 foo.log | |
java.util.logging.ConsoleHandler.level = FINE | |
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter |
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 則回應: