ใช้งาน log4php เพื่อเก็บ log file สำหรับ PHP web application

Tags: php

log4php เป็น library ที่ถูก export จาก project log4j ของฝั่ง Java เป็นชุดคำสั่งที่ช่วยอำนวยความสะดวกในการสร้าง log file

โดย log file นี้จะจัดเก็บข้อความที่แบ่งออกเป็น 6 ระดับ

ระดับ ความสำคัญ คำอธิบาย
FATAL Highest Very severe error events that will presumably lead the application to abort.
ERROR ... Error events that might still allow the application to continue running.
WARN ... Potentially harmful situations which still allow the application to continue running.
INFO ... Informational messages that highlight the progress of the application at coarse-grained level.
DEBUG ... Fine-grained informational events that are most useful to debug an application.
TRACE Lowest Finest-grained informational events.

จะเห็นว่าการเก็บข้อความในรูปแบบ log file จะมีประโยชน์อย่างมากทั้งในด้านค้นหาข้อผิดพลาดของโปรแกรม การเก็บข้อมูลการทำงานของโปรแกรม สามารถที่จะดูข้อมูลย้อนหลังได้ สามารถบันทึกเวลาที่เกิดเหตุการณ์ใดเหตุการณ์หนึ่งใน application ก็ได้

ขึ้นตอนการนำ log4php มาใช้งาน

  • Donwload source code ของ log4php สามารถ download ได้จากที่นี่ (เนื่องจากเป็น post เก่าที่ migrate สำหรับ project ใหม่ๆ แนะนำให้ติดตั้งผ่าน composer แทนนะครับ)
  • สร้าง log4php configuration file (xml file) ตัวอย่าง log4php.xml
<?xml version="1.0" encoding="UTF-8"?>
<log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/">
    <appender name="appenderName" class="LoggerAppenderDailyFile"> <!-- 1 -->
        <param name="datePattern" value="Y-m-d" /> <!-- 2 -->
        <param name="file" value="messageLog-%s.txt" />  <!-- 3 -->   
        <layout class="LoggerLayoutPattern"> <!-- 4 -->
            <param name="conversionPattern" 
            value="%d{Y-m-d H:i:s.u} %F %c %-5p %m%n" /> <!-- 5 -->
        </layout>   
    </appender>                    
    <root>
        <level value="WARN" />  <!-- 6 -->           
        <appender_ref ref="appenderName" /> <!-- 7 -->
    </root>
</log4php:configuration>

คำอธิบายตามหมายเลขที่ได้กำกับไว้ใน configuration file

  • appender เป็นตัวที่ไว้กับหนดว่า log ที่สร้างขึ้นจะเก็บข้อความไว้ที่ใด ที่ appender element ทำการระบุชื่อของ appender ที่ต้อง unique ระบุชื่อ class ของ appender ในตัวอย่าง กำหนดเป็น LoggerAppenderDailyFile ข้อความที่ถูกสร้างขึ้นจะถูกเก็บลง text file และแต่ละวันจะมีการ text file ใหม่ขึ้นมา
  • กำหนดรูปแบบของวันที่เพื่อใช้เป็นส่วนหนึ่งของชื่อ log file ในตัวอย่างนี้คือ Y-m-d วันที่จะออกมาในรูปแบบ 2011-09-14
  • กำหนดชือของ log file พร้อม path ในตัวอย่างในกำหนดเฉพาะชื่อของ file เพียงอย่างเดียว (กำหนดแบบ relative) ดังนั้น text file ที่ได้จะถูกสร้างขึ้นมาในระดับเดียวกับ php file ที่สร้าง log file นี้ขึ้นมา ต้องกำหนด %s เข้าไปในชื่อของ log file ซึ่ง %s จะถูกแทนที่ด้วยรูปแบบของวันที่ที่กำหนดไว้ในข้อ 2
  • กำหนดชื่อ class ที่ชื่อว่า LoggerLayoutPattern ให้กับ layout เพื่อกำหนดรูปแบบของข้อความที่จะเขียนลง text file ขึ้นมาเอง
  • กำหนดรูปแบบของข้อความที่จะเก็บลง log file โดยตัวแปรแต่ละตัวมีความหมายดังนี้
%d{ y-m-d H:i:s.u}  ปี เดือน วัน ชม. นาที วินาที ตามลำดับ
%F php  file ที่สร้างข้อความ
%c ชื่อของ log ที่ได้กำหนดไว้ตอนสร้าง log ภายในชุดคำสั่งของ php
%-5p ระดับของข้อความ
%m ข้อความ
%n line break
  • กำหนดว่าทุก log ที่มีระดับตั้งแต่ WARN จะถูกเขียนลง text file
  • กำหนด appender ที่จะใช้สำหรับ log ทั้งหมดใน application ในตัวอย่างนี้ข้อความทั้งหมดจะถูกเขียนลง text file

สร้าง php file (testLog.php) เพื่อทดลองการใช้งาน

<?php
//include log4php เข้ามา
include('log4php/Logger.php');

// กำหนด configuration ที่ได้สร้างไว้
Logger::configure('log4php.xml');

// สร้าง logger เพื่อไว้เขียนข้อความ
$log = Logger::getLogger('loggerName');

//เริ่มทำการเขียนลง text file
$log->trace("This is trace message.");   //ไม่ถูกเขียนลง text file เนื่องจาก TRACE < WARN
$log->debug("This is debug message.");  //ไม่ถูกเขียนลง text file เนื่องจาก DEBUG < WARN
$log->info("This is info message.");    //ไม่ถูกเขียนลง text file เนื่องจาก INFO < WARN
$log->warn("This is warn message.");   //ไม่ถูกเขียนลง text file เนื่องจาก WARN >= WARN
$log->error("This is error message.");   //ไม่ถูกเขียนลง text file เนื่องจาก ERROR >= WARN
$log->fatal("This is fatal message.");   //ไม่ถูกเขียนลง text file เนื่องจาก FATAL >= WARN

?>

run php file ที่ได้สร้างขึ้นมา

messageLog-2011-09-14.txt จะถูกสร้างขึ้นมาโดยอัตโนมัต และภายใน text file นี้จะมีข้อความดังนี้

2011-09-14 20:14:55.645 C:\AppServ\www\log4php\testLog.php loggerName WARN  This is warn message.
2011-09-14 20:14:55.646 C:\AppServ\www\log4php\testLog.php loggerName ERROR This is error message.
2011-09-14 20:14:55.646 C:\AppServ\www\log4php\testLog.php loggerName FATAL This is fatal message.

อ้างอิงจาก http://logging.apache.org/log4php/

Facebook Page