顯示具有 Log 標籤的文章。 顯示所有文章
顯示具有 Log 標籤的文章。 顯示所有文章

2016-11-21

好用卻陌生的 log4j 的累加屬性(additivity)

log4j 設定有三個主角:Logger、Appender 與 Pattern(Layout)。

Appender 設定的是 Log 的出口,看是要往 Console 去呢?還是送到檔案裡存下來。

Pattern 設定的就是 Log 輸出的格式,重點就是時間、程式位置與 Log 訊息。

Logger 設定的則是來自哪裡的 Log 要送去哪個 Appender。

2012-08-28

log4j.properties 小記

設定檔可以分成兩部份:
  • logger - 來自於哪裡的 log 訊息,可以用 rootLogger 表示所有的訊息來源,也可以用 package 限定來源範圍。
  • appender - 要導向哪裡,可以是 console  或檔案。

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 可以用。

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 的。

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("...");