log4j 設定有三個主角:Logger、Appender 與 Pattern(Layout)。
Appender 設定的是 Log 的出口,看是要往 Console 去呢?還是送到檔案裡存下來。
Pattern 設定的就是 Log 輸出的格式,重點就是時間、程式位置與 Log 訊息。
Logger 設定的則是來自哪裡的 Log 要送去哪個 Appender。
2016-11-21
2012-08-28
log4j.properties 小記
設定檔可以分成兩部份:
- logger - 來自於哪裡的 log 訊息,可以用 rootLogger 表示所有的訊息來源,也可以用 package 限定來源範圍。
- appender - 要導向哪裡,可以是 console 或檔案。
標籤:
Log
2011-01-28
10 Tips for Proper Application Logging
資料來源:10 Tips for Proper Application Logging
- 考慮 log4j 以外的選擇 - SLF4J, Logback
- 使用 SLF4J 的第一個理由
log.debug("{} records found in this area, {}", cnt, area);
- 不用一堆加號來組合出 log 訊息。
- 如果該 log level 不輸出,可以改善文字接龍的小小效能,也省掉了囉唆的 isDebugEnabled()。
- logging level 很重要
- ERROR - 發生不得不處理的錯誤,導致程式無法繼續,像是資料庫連線、NPE等。
- WARN - 程式可以繼續、但是要特別注意的狀況,例如使用備份資料代替正式資料或者系統以除錯模式啟動等。
- INFO - 系統完成重要的商業流程或更改重要的狀態,必須讓管理者可以事後追蹤。
- DEBUG - 開發者專用,稍後再詳述。
- TRACE - 專門供開發過程紀錄詳細的訊息使用,可以在佈署到正式環境後仍然持續紀錄一段時間,但最終是會關閉的;在一項功能經過開發與測試完成後,是否可以移除該 log 程式,為 TRACE 與 DEBUG 的最主要差異所在。
- 基本原則是,紀錄所有大大小小的事情,但是要分 level,不然就要有心裡準備從草堆裡找一根針 。
- 除非可以證明真的造成效能瓶頸,否則沒必要使用 is*Enabled(),更何況還有 SLF4J 的 placeholder 可以用。
標籤:
Log
2011-01-26
SLF4J 1.6.1 速成
- SLF4J - Simple Logging Facade for Java
- 與 Jakarta Commons Logging(JCL) 一樣,SLF4J 提供一個抽象層,讓系統可以在 deploy 時抽換像是 log4j 之類的 logging framewok。
- "Hello World" example,得加入 slf4j-api-xxx.jar 與 slf4j-simple-xxx.jar 。
Logger log = LoggerFactory.getLogger(this.getClass()); - 一個讓人想要用 SLF4J 的功能 - placeholder。
log.debug("{} records found in this area, {}", cnt, area); - SLF4J 裡的三種角色:
- slf4j-api - slf4j core api
- slf4j-log4j12 - slf4j logging binding
- log4j - logging framework
- 所以在 deploy 時要抽換的是 slf4j logging binding,而不是 logging framework。
- 如果在執行時,slf4j 沒有找到 binding,那就自動進入 slf4j-nop binding 狀態。
- 區分 binding 與 framework 的好處之一是,component 的 user 可以自行決定使用哪一種 framework 而加入哪一種 binding,所以 component 是可以不內建 binding 的。
標籤:
Log
2011-01-19
在 Spring 中使用 logging
- 先使用 Maven 建立 Spring 專案,參考使用 Maven 建立 Java、Web 和 Spring 專案。
- 使用 log4j
- 於 pom.xml 中加入以下 dependencies,commons-logging 可以不用加,因為在 spring-context 中有用到。
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>runtime</scope>
</dependency>
- 在 src/main/resources 下加入 log4j.xml。
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
- commons-logging 程式範例
private Log log = LogFactory.getLog(AppTest.class);
log.debug("...");
訂閱:
文章 (Atom)