跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

การใช้งาน Monolog เบื้องต้น: การสร้าง Logger

บทความนี้อธิบายถึงวิธีการสร้าง Logger object ด้วย Monolog ซึ่งเป็นจุดเริ่มต้นของการบันทึกข้อมูลในระบบ โดยการกำหนด Channel name ให้กับ Logger เพื่อแยกแยะ Log ที่...

การใช้งาน Monolog เบื้องต้น: การสร้าง Logger

หลังจากที่เราติดตั้ง Monolog ผ่าน Composer เรียบร้อยแล้ว ขั้นตอนต่อไปคือการสร้าง Logger object เพื่อใช้ในการบันทึกข้อมูลต่างๆ ในระบบของเรา Logger object นี้เปรียบเสมือนจุดเริ่มต้นของการใช้งาน Monolog ทั้งหมด โดยเราจะกำหนด Channel name ให้กับ Logger เพื่อแยกแยะ Log ที่มาจากส่วนต่างๆ ของระบบ

Logger Class คืออะไร?

Logger เป็น Class หลักของ Monolog ที่ทำหน้าที่เป็นศูนย์กลางในการจัดการ Log ทั้งหมด มันรับผิดชอบในการรับข้อความ Log, จัดรูปแบบข้อความ, และส่งไปยัง Handler ที่เหมาะสมเพื่อบันทึกข้อมูลลงในที่ต่างๆ เช่น ไฟล์, ฐานข้อมูล, หรือบริการภายนอก

ในการใช้งาน Logger เราจะต้องสร้าง Instance ของ Class นี้ก่อน และกำหนด Channel name ให้กับมัน Channel name นี้จะช่วยให้เราสามารถแยกแยะ Log ที่มาจากส่วนต่างๆ ของระบบได้ง่ายขึ้น

Channel Name คืออะไร?

Channel name คือชื่อที่ใช้ระบุแหล่งที่มาของ Log messages มันมีประโยชน์อย่างมากในการจัดกลุ่มและกรอง Log จากส่วนต่างๆ ของ Application ของเรา ตัวอย่างเช่น เราอาจมี Channel ชื่อ "database" สำหรับ Log ที่เกี่ยวข้องกับการทำงานกับฐานข้อมูล และ Channel ชื่อ "api" สำหรับ Log ที่เกี่ยวข้องกับการเรียก API

Channel name เป็น String และควรสื่อความหมายที่ชัดเจนเพื่อให้ง่ายต่อการเข้าใจและจัดการ Log ในภายหลัง

ตัวอย่างการสร้าง Logger Object

ต่อไปนี้เป็นตัวอย่างโค้ดที่แสดงวิธีการสร้าง Logger object ด้วย Monolog:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// สร้าง Logger instance โดยกำหนด Channel name เป็น 'my_app'
$log = new Logger('my_app');

// เพิ่ม Handler เพื่อบันทึก Log ลงในไฟล์
$log->pushHandler(new StreamHandler('path/to/your/log/file.log', Logger::WARNING));

// บันทึก Log message
$log->warning('This is a warning message.');
$log->error('This is an error message.');

?>

คำอธิบายโค้ด:

  • require_once __DIR__ . '/vendor/autoload.php';: Include Autoloader ที่ Composer สร้างขึ้น เพื่อให้สามารถใช้งาน Class ต่างๆ ของ Monolog ได้
  • use Monolog\Logger; และ use Monolog\Handler\StreamHandler;: Import Class ที่จำเป็นต้องใช้จาก Namespace Monolog
  • $log = new Logger('my_app');: สร้าง Instance ของ Class Logger และกำหนด Channel name เป็น 'my_app'
  • $log->pushHandler(new StreamHandler('path/to/your/log/file.log', Logger::WARNING));: เพิ่ม Handler เพื่อบันทึก Log ลงในไฟล์ path/to/your/log/file.log โดยจะบันทึก Log ที่มี Level ตั้งแต่ WARNING ขึ้นไป (WARNING, ERROR, CRITICAL, ALERT, EMERGENCY)
  • $log->warning('This is a warning message.'); และ $log->error('This is an error message.');: บันทึก Log message ระดับ WARNING และ ERROR ตามลำดับ

การกำหนด Channel Name ที่สื่อความหมาย

การเลือก Channel name ที่ดีมีความสำคัญต่อการจัดการ Log ในระยะยาว นี่คือตัวอย่างของ Channel name ที่มีความหมายและสามารถนำไปประยุกต์ใช้ได้จริง:

  • 'user_authentication': สำหรับ Log ที่เกี่ยวข้องกับการ Login และ Logout ของผู้ใช้งาน
  • 'payment_processing': สำหรับ Log ที่เกี่ยวข้องกับการชำระเงิน
  • 'order_management': สำหรับ Log ที่เกี่ยวข้องกับการจัดการคำสั่งซื้อ
  • 'api_requests': สำหรับ Log ที่เกี่ยวข้องกับการเรียก API ภายนอก
  • 'database_queries': สำหรับ Log ที่เกี่ยวข้องกับการ Query ฐานข้อมูล

การใช้ Channel name เหล่านี้จะช่วยให้เราสามารถกรองและวิเคราะห์ Log ได้อย่างมีประสิทธิภาพมากขึ้น

การใช้งาน Logger ใน Class ต่างๆ

โดยทั่วไปแล้ว เราจะสร้าง Logger instance เพียงครั้งเดียวใน Application และส่งต่อ (inject) Logger instance นั้นไปยัง Class ต่างๆ ที่ต้องการบันทึก Log วิธีนี้จะช่วยให้เราสามารถจัดการ Log ได้อย่างเป็นระบบและลดความซ้ำซ้อนของโค้ด

ตัวอย่าง:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

class UserManager {
    private $log;

    public function __construct(Logger $log) {
        $this->log = $log;
    }

    public function createUser(string $username, string $password) {
        // ... โค้ดสร้าง User ...

        if ($userCreatedSuccessfully) {
            $this->log->info('User created successfully: ' . $username);
        } else {
            $this->log->error('Failed to create user: ' . $username);
        }
    }
}

// สร้าง Logger instance
$log = new Logger('user_management');
$log->pushHandler(new StreamHandler('path/to/your/log/user_management.log', Logger::INFO));

// สร้าง UserManager instance โดยส่ง Logger instance เข้าไป
$userManager = new UserManager($log);

// เรียกใช้งาน method createUser
$userManager->createUser('john.doe', 'password123');

?>

คำอธิบายโค้ด:

  • Class UserManager รับ Logger instance ผ่าน Constructor (Dependency Injection)
  • ภายใน createUser method, เราใช้ $this->log เพื่อบันทึก Log message เกี่ยวกับการสร้าง User
  • เราสร้าง Logger instance และ UserManager instance แยกกัน และส่ง Logger instance ให้กับ UserManager

การทำ Dependency Injection แบบนี้ช่วยให้เราสามารถเปลี่ยน Logger implementation ได้ง่ายขึ้นในอนาคต โดยไม่ต้องแก้ไขโค้ดภายใน UserManager

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการสร้าง Logger object ด้วย Monolog และความสำคัญของการกำหนด Channel name ที่สื่อความหมาย นอกจากนี้ เรายังได้เห็นตัวอย่างการใช้งาน Logger ใน Class ต่างๆ โดยใช้ Dependency Injection เพื่อให้โค้ดมีความยืดหยุ่นและง่ายต่อการบำรุงรักษา ในบทต่อไป เราจะเรียนรู้เกี่ยวกับการกำหนด Handler ใน Monolog เพื่อกำหนดว่าจะบันทึก Log ไปที่ไหน และด้วยรูปแบบใด

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务