Log4j 使用方式

建立 log4j.properites

於專案的 src 目錄下,新增一個 log4j.properites 檔案。

配置 log4j.properites

設定 log4j.rootLogger

  • 語法:log4j.rootLogger = [ level ] , appenderName1, appenderName2, ...
  • level 分別為:DEBUG < INFO < WARN < ERROR < FATAL
  • 比如說:level 設定為 INFO,log 輸出訊息只會紀錄 INFO ~ FATAL,以此類推。
  • 還可以設定為 ALL 和 OFF:ALL 表示全部訊息輸出,OFF 表示全部不輸出。

指定 log 訊息輸出目的地

  • 語法:log4j.appender.appenderName = [目的地]
  • 目的地可設定為以下五種:
    • org.apache.log4j.ConsoleAppender (Consule)
    • org.apache.log4j.FileAppender (Log文件)
    • org.apache.log4j.DailyRollingFileAppender (每天產生一個新的Log文件)
    • org.apache.log4j.RollingFileAppender (Log文件到達指定大小會產生一個新的文件)
    • org.apache.log4j.WriterAppender (將Log訊息發送到指定地方)
  • 若輸出目的地為 DailyRollingFileAppender,可設定:
    • File = log檔案輸出的路徑,例如:/Users/Bob/Log/log.txt。
    • DatePattern = '.'yyyy-MM-dd,代表每天產生一個新的Log文件。其他設定如下:
      • '.'yyyy-ww,代表每週。
      • '.'yyyy-MM-dd-a,代表每天兩次。
      • '.'yyyy-MM-dd-HH,代表每小时 。

自定 log 訊息輸出格式

  • 語法:log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout
  • PatternLayout 代表要自己指定訊息輸出格式。

設定 log 訊息輸出格式

  • 語法:log4j.appender.logfile.layout.ConversionPattern = [自訂的訊息輸出格式]
  • 格式設定如下:
    • %d{yyyy-MM-dd HH:mm:ss}:指定日期和時間輸出格式。
    • %F:輸出 Java 類別名稱。
    • %L:輸出 Java 代碼中的行數。
    • %m:輸出 Log 訊息。
    • %n:換行。

動態配置 log4j.properites

  • 當 local 和 server 端需要不同的 log4j.properites 配置時。
  • 在 Java 的 contextInitialized 中,設定System.setProperty(key, value),該設定必須最優先被執行。
  • 設定完後,在 log4j.properites 中,引用設定的 key 值,例如:${key}。

完整範例如下

  • 其中的動態配置:
  • contextInitialized
    • System.setProperty("log4j.level","INFO");
    • System.setProperty("log4j.logFilePath","/home/deploy/Log/log.txt");
  • log4j.properites
    • ${log4j.level}
    • ${log4j.logFilePath}
log4j.rootLogger=${log4j.level}, console, logfile

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%F:%L] %m%n

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${log4j.logFilePath}
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%F:%L] %m%n

禁止輸出依賴套件訊息

有些套件,如 springframework,會依賴 log4j 作 log 訊息輸出, 如果不想輸出相關訊息,可進行以下設定:

log4j.logger.org.apache.commons=INFO
log4j.logger.org.apache.jasper=INFO
log4j.logger.org.apache.catalina=INFO
log4j.logger.org.springframework.scheduling=INFO

寫入 Log 訊息

Logger logger = Logger.getLogger(Some.class);
logger.info("log4j info message!");

以上述範例設定輸出格式,顯示如下:
2017-12-16 10:29:57 [Some.java:26] log4j info message!

results matching ""

    No results matching ""