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!