← Home

Logging in PHP

ช่วงนี้ต้องทำงานกับ PHP ปัญหาอย่างนึงที่เจอคือต้องการดูผลลัพธ์บางอย่าง ถ้าเป็นแต่ก่อนก็คงให้พิมพ์ออกมาในหน้าเว็บตรงๆ แต่นี่มันปี 2014 ที่ javascript มี console.log แล้ว PHP ก็น่าจะมีเหมือนกันสิ แล้วก็เจอว่า PHP ก็มีอะไรคล้ายๆ กันจริงด้วยชื่อว่า error_log

error_log รับ arguments 4 ค่าเริ่มจาก ข้อความที่จะพิมพ์ลง log, ประเภทข้อความ, ตำแหน่งของ log, ข้อมูลอื่นๆ นอกจากข้อความใน argument แรกแล้วที่เหลือไม่จำเป็นต้องใส่

เวลาใช้ปกติก็ส่งเข้า error_log ตรงๆ error_log('message'); หรือ error_log($variable); แต่บางครั้งไม่อยากเห็น debug message ปนกับข้อความอื่นของ server ก็กำหนดหน่อยให้มันลงแยก error_log('message', 3, '/var/log/debug.php.logs');

แต่บางครั้ง log แค่ message ไม่พออยาก dump variable ออกมาดูด้วยว่าหน้าตาเป็นยังไงก็มี function ช่วยอีกอัน print_r ที่สามารถกำหนดได้ว่าให้ return หน้าตาของตัวแปรออกไป ใช้คู่กับ error_log ก็จะได้เห็นหน้าตาของตัวแปรใน log file ที่ต้องการ error_log(print_r($variable, true));

แต่ๆ เท่านั้นยังไม่พอ บางทีอยากเห็น stack trace ด้วยเพื่อไล่การทำงานของ function ถูกก็มี function debug_backtrace เวลาใช้ส่วนใหญ่จะใช้ในแบบ code ด้านล่าง (จริงๆ มันรับ argument เพื่อกำหนดขอบเขตของ output ด้วยแต่ไปๆ มาพิมพ์เองนี่แหละง่ายกว่า)

$trace = debug_backtrace();
foreach ($trace as $value) {
  $file = $value['file'];
  $line = $value['line'];
  error_log("$file $line");
}

อ้างอิง:

← Home