ในบทความนี้ เราจะเรียนรู้เกี่ยวกับโมดูล logging ใน Python ซึ่งเป็นเครื่องมือสำคัญสำหรับการบันทึกข้อความสถานะ การแก้ไขบั๊ก (debugging) และการตรวจสอบความปลอดภัยของโปรแกรม
ระดับความรุนแรง (Severity Levels)
โมดูล logging มี 5 ระดับความรุนแรง เรียงจากต่ำไปสูง:
- DEBUG - ข้อมูลรายละเอียดสำหรับการแก้ไขบั๊ก
- INFO - ข้อมูลทั่วไปเกี่ยวกับการทำงานของโปรแกรม
- WARNING - เหตุการณ์ที่ไม่คาดคิดหรืออาจก่อให้เกิดปัญหาในอนาคต
- ERROR - ข้อผิดพลาดที่ทำให้ฟังก์ชันบางส่วนทำงานไม่ได้
- CRITICAL - ข้อผิดพลาดร้ายแรงที่อาจทำให้โปรแกรมหยุดทำงาน
การใช้งานพื้นฐาน
โมดูล logging พร้อมใช้งานทันทีโดยไม่ต้องตั้งค่าก่อน แต่ค่าเริ่มต้นจะแสดงเฉพาะระดับ WARNING ขึ้นไป
ตัวอย่าง
import logging
logging.debug('ข้อความ debug')
logging.info('ข้อความ info')
logging.warning('ข้อความ warning')
logging.error('ข้อความ error')
logging.critical('ข้อความ critical')
ผลลัพธ์ (ค่าเริ่มต้น)
WARNING:root: ข้อความ warning ERROR:root: ข้อความ error CRITICAL:root: ข้อความ critical
การตั้งค่าระดับการบันทึก (Basic Configuration)
ใช้ basicConfig() เพื่อกำหนดระดับขั้นต่ำที่จะบันทึก
ตัวอย่าง: บันทึกระดับ DEBUG ขึ้นไป
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('ข้อความนี้จะถูกบันทึกแล้ว')
ผลลัพธ์
DEBUG:root: ข้อความนี้จะถูกบันทึกแล้ว
การบันทึกลงไฟล์ (File Logging)
แทนที่จะแสดงบนคอนโซล สามารถบันทึกลงไฟล์ได้ด้วยพารามิเตอร์ filename, filemode, และ format
ตัวอย่าง
import logging
logging.basicConfig(
filename='app.log',
filemode='w',
format='%(name)s - %(levelname)s - %(message)s'
)
logging.warning('ข้อความนี้จะถูกบันทึกลงไฟล์')
เนื้อหาไฟล์ app.log
root - WARNING - ข้อความนี้จะถูกบันทึกลงไฟล์
หมายเหตุ: filemode='w' จะเขียนทับไฟล์เดิม (ค่าเริ่มต้นคือ 'a' สำหรับ append)
รูปแบบการจัดรูปแบบข้อความ (Format Specifiers)
| ตัวแทน | ความหมาย |
|---|---|
%(name)s | ชื่อของ logger |
%(levelname)s | ระดับความรุนแรง |
%(message)s | ข้อความที่บันทึก |
%(asctime)s | เวลาที่บันทึก |
%(module)s | ชื่อโมดูล |
%(lineno)d | หมายเลขบรรทัด |
สรุป
โมดูล logging เป็นเครื่องมือที่ทรงพลังและยืดหยุ่นสำหรับการติดตามการทำงานของโปรแกรม การตั้งค่าระดับและรูปแบบที่เหมาะสมจะช่วยให้การแก้ไขบั๊กและการบำรุงรักษาระบบเป็นไปอย่างมีประสิทธิภาพมากขึ้น