Logging調優
記錄日誌是每一個應用程式的一個重要任務,預設的配置一般只適合開發,但不適用於生產環境。
您切換到生產環境時需要考慮的關鍵要素是:
1. 選擇一個合適的輸出日誌的處理handler。
2. 選擇一個合適的記錄層級,它恰好可以提供給你需要的足夠資訊,不多也不少。
3. 選擇一個合適的日誌輸出格式。
鑒於一般考慮,日誌的處理handler,預設配置會啟動控制台和檔案的日誌輸出。雖然這可能在開發環境中是合適的,但在生產環境中使用控制台日誌輸出將會是一個昂貴的處理過程,導致大量的非緩衝I / O。雖然一些應用程式可能適合控制台日誌輸出,但大多數應用更適合關閉控制台日誌輸出,只使用檔案輸出的處理handler。
為了去掉控制台日誌,你可以簡單地注釋掉其處理handler:
<root-logger> <level name="INFO"/> <handlers> <!-- <handler name="CONSOLE"/> --> <handler name="FILE"/> </handlers> </root-logger> |
下一步是選擇正確的日誌記錄層級。顯然,記錄的日誌越少,發生的I / O就越少,這樣您的整個應用程式的效能會更好。預設配置使用“INFO”層級根記錄器。你可以考慮提高到較高的層級,如“WARN”或(使用細粒度的approach)改變單一的日誌記錄類別(category)。
<logger category="org.hibernate"> <level name="WARN"/> </logger> |
在這個例子中,我們剛才提出的org.hibernate包使用“WARN”層級,這將從Hibernate中輸出更加簡潔的日誌資訊。
最後,記錄模式(pattern)也會影響您的應用程式的效能。例如,我們使用預設模式格式,如下所示:
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/> |
日誌記錄模式的詳細解釋可以在第2章的控制台處理handler內容中找到。從這個基本格式開始,可儘可能考慮添加標誌%l,可以通過列印出行號和發出日誌的Class來提高你的日誌的詳細程度:
<pattern-formatter pattern="%l %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/> |
一旦伺服器配置被重新載入,控制台輸出下面的日誌資訊:
雖然這些資訊在開發時非常有用,但它會導致移植到生產環境中產生很大的效能負擔。
其它可能對你的日誌效能造成負面影響的標誌有%C(列印出調用者的Class資訊),%M(它輸出列印日誌的方法)和%F(它輸出發出日誌記錄請求的檔案名稱)。