[Java] Log4j การเก็บบันทึก (log file)

log4j เป็น class สำหรับใช้ในการจัดเก็บบันทึกภาษา java ซึ่งอาจใช้แทน System.out.println(); ที่เราแทรกๆกันใน code เพื่อ debugging ก็ได้ แต่มันเหนือกว่าตรงที่ log4j สามารถอ่านได้ง่ายกว่า กำหนดระดับของการ debugging ได้ สามารถปรับแต่งเพื่อให้ log แสดงบน console, แสดงใน text file, แสดงบน database หรือ email ก็ทำได้ ซึ่งระดับของ log มีอยู่ 5 ระดับ คือ DEBUG, INFO, WARN, ERROR, FATAL โดยเรียงตามระดับของความร้ายแรงจากต่ำไปสูง

วิธีการติดตั้ง log4j สำหรับ Java class ของเรานะครับ โดยตัวอย่างนี้จะทำบน Netbeans IDE โดยใช้ DailyRollingFileAppender ซึ่งจะบันทึก log ลง text file รายวันครับ

1. Download Log4j
2. ทำการ Add เฉพาะไฟล์ .jar ลงไปใน library project ของเราครับ

Add log4j library

3. เมื่อ Add library log4j แล้ว จะทำให้เราสามารถ import class ของ log4j ได้ แต่ว่า เราต้องกำหนด properties ของ log4j ด้วยการเขียน properties file (Add file -> other -> properties file) ครับ โดย
log4j.rootLogger=DEBUG, connectorLog #กำหนดระดับเป็น DEBUG ,ตั้งชื่อตัวแปร
log4j.appender.connectorLog=org.apache.log4j.DailyRollingFileAppender #DailyRollingFileAppender ใช้เก็บ log เป็น File
log4j.appender.connectorLog.File=C:/testlog.log #ระบุที่อยู่ของ file
log4j.appender.connectorLog.Append=true #อนุญาติให้เขียนต่อ (ไม่เขียนทับ)
log4j.appender.connectorLog.layout=org.apache.log4j.PatternLayout #กำหนด class PatternLayout ใส่ตัวแปร
log4j.appender.connectorLog.layout.ConversionPattern=%d %-5p %C{1} - %m%n #กำหนดรูปแบบแสดงผล 

%d หมายถึง Date ครับ จะแสดงแบบ yyyy-MM-dd HH:MM::ss
%p หมายถึง Level ของ log (DEBUG,INFO,....) -5 คือให้กว้าง 5 ตัวอักษร
%C หมายถึง Class name ที่มีการดำเนินการ log นั้นๆ
%m หมายถึง User-message
%n หมายถึง New line
*PatternLayout ตัวอื่นๆ ลองดูที่นี่ครับ https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
*appender ตัวอื่นๆ ลองดูที่นี่ครับ https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html


4. เมื่อได้ properties file แล้ว เราก็ต้อง import class เข้ามาใช้งานได้แล้วครับ ซึ่งที่จำเป็นต้องใช้มี 3 class ด้วยกัน

import java.util.Properties; // ใช้สำหรับอ่าน properties file ที่เขียนไว้แล้ว
import org.apache.log4j.Logger; // ใช้เขียน log
import org.apache.log4j.PropertyConfigurator; // ใช้สำหรับตั้งค่าจาก properties file ให้ log

5. เขียนคำสั่งทดลง load log4j นอก method ทุกตัว

    protected static Properties log4jProperties = new Properties();
    protected static Logger logger;
   
    static {
        try {
            log4jProperties = new Properties();
            PropertyConfigurator.configure(log4jProperties);
            logger = Logger.getLogger(----ชื่อคลาส----.class);
            logger.debug(">>>>>>>>>>>> LOAD LOG4J SUCCESS <<<<<<<<<<<<<<< ");   
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6. ทดลองใส่คำสั่งที่ต้องการ และระดับความรุนแรงของ log ใน method ที่ต้องการ

logger.debug("Debug Message"); // ระดับความรุนแรงคือ debug จะแสดงข้อความ "Debug Message" ใน log

7. ลองเปิดดูไฟล์ C:/testlog.log ก็จะพบข้อความ

2011-10-14 17:55:37,998 DEBUG testclass  - >>>>>>>>>>>> LOAD LOG4J SUCCESS <<<<<<<<<<<<<<< 
2011-10-14 17:55:39,590 DEBUG testclass - Debug Message

*เมื่อขึ้นวันใหม่ DailyRollingFileAppender จะปรับชื่อไฟล์เก่าเป็นวันที่อัตโนมัติครับ เพื่อสร้าง testlog.log สำหรับวันปัจจุบันครับ


แหล่งข้อมูล
https://www.vaannila.com/log4j/sample-log4j-properties-file-configuration-1.html
https://digimarukung.exteen.com/category/Java/page/3
https://www.allapplabs.com/log4j/log4j_levels.htm
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html

Facebook Comment

Popular post of 7 days

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ