Log4j Guide
ปกติเวลาเขียน java ถ้าอยากดูค่าตัวแปรก็มักจะใช้ System.out.println ให้แสดงผลออกมาทาง console
ตอนที่ Develop ก็ง่ายดีอ่ะนะ แต่พอเอาไปใช้งานจริงกับ App Server ก็ไม่ได้ช่วยอะไรดูผลอะไรก็ยาก
บางคนก็เขียน class เก็บ log file เอาเองแบบเขียนลง file ได้เป็นพอ ก็ช่วยได้บ้าง
แต่จริงๆแล้วควรมีการเก็บ log การทำงานของโปรแกรมให้เป็นระบบหน่อย ลองดูๆก็มาเจอLog4j ของ Apache ที่ดูเข้าท่าดี
Log4j เป็น class library ที่ไว้จัดการกับ Log โดยปกติแล้วจะมี Console, File, Database และ E-Mail แต่ก็สามารถเขียนเพิ่มเติมเองได้
Level ของ Log จะแบ่งเป็น 5 Level ตามนี้(จากต่ำไปสูง)
- Debug
- Info
- Warn
- Error
- Fatal
โดย Level ที่สูงกว่าจะเขียน Log ของ Level ต่ำกว่าติดมาด้วย
ใน code ของเราก็จะมีการเขียน logging โดยไม่ต้องสนใจว่าจะ log level ไหน ให้เขียนตามสะดวก แล้วค่อย set properties file ให้เก็บ log ที่ level ไหน
วิธีใช้งาน Log4j ก่อนก็ต้องไป download log4j มาจาก Apache log4j ก่อน แล้ว add log4j.jar เข้ามาใน project
ตัวอย่าง code
import org.apache.log4j.Logger;
public class LogClass {private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
public void getI(){};
public static void main(String[] args) {log.debug(“Debug”);
log.info(“Info”);
log.warn(“Warn”);
log.error(“Error”);
log.fatal(“Fatal”);
try{LogClass clz=null;
clz.getI();}
catch(Exception ex){log.error(“Error Performing Operation”,ex);}}
}
ต่อไปต้องมีการสร้าง file configure ซึ่งจะเป็นในแบบ Properties หรือเป็น XML ก็ได้ แล้วแต่ความถนัด เพื่อจะกำหนดค่าต่างๆของการ write log โดยถ้าไม่ได้สั่ง load file configure ก็จะใช้ file ชื่อ log4j.properties ดังตัวอย่าง
### file appender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=’.'yyyy-MM-dd
log4j.appender.file.File=/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%nlog4j.rootLogger=Debug, file, stdout
จะเป็นการเก็บ log ใน File ชื่อ test.log และแสดงผลออกมาทาง console โดยมี Pattern แบบนี้
23:43:21,968 DEBUG LogClass:29 – Debug
23:43:21,968 INFO LogClass:29 – Info
23:43:21,968 WARN LogClass:29 – Warn
23:43:21,968 ERROR LogClass:29 – Error
23:43:21,968 FATAL LogClass:29 – Fatal
Pattern การแสดงสามารถตั้งค่าได้ที่ layoutใConversionPatternโดยมีค่าตามนี้
#%c Logger, %c{2 } last 2 partial names
#%C Class name (full agony), %C{2 } last 2 partial names
#%d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat
#%F File name
#%l Location (caution: compiler-option-dependently)
#%L Line number
#%m user-defined message
#%M Method name
#%p Level
#%r Milliseconds since program start
#%t Threadname
#%x, %X see Doku
#%% individual percentage sign
#Caution: %C, %F, %l, %L, %M slow down program run!
เราสามารถ Load file configure ได้ตามนี้
PropertyConfigurator.configure(“c:\\data\\config\\log4j.properties”);
เขียน ex.printStackTrace(); ลง log
log.error(“Error Performing Operation”,ex);