Logging คือกระบวนการบันทึกข้อมูลเกี่ยวกับสิ่งที่ Ruby Application กำลังทำ — มีประโยชน์มากทั้ง Development และ Production
ทำไม? เพราะจุดประสงค์ของ Logging คือเก็บข้อมูล: เกิดอะไรขึ้น ไปไหน ถูกไหน
ข้อมูลทุกแบบ Log ได้:
- Slow SQL Queries (หาและแก้ได้)
- Error Messages
- Request Details (URL, Controller, Params, Views...)
ด้วยข้อมูลนี้ Diagnose และหา Root Cause ของปัญหาใน App ได้เร็วขึ้น
ใน Rails App Logs อยู่ที่ /log — Development Mode ใช้ development.log และเห็น Output บน Terminal ที่รัน rails server
ตอนนี้: เรียนรู้การ Logging ใน Ruby ด้วย Class Logger!
The Logger Class
Ruby Logger Class ให้สร้าง Logs ด้วย Default Output Format และ Severity Levels ต่างๆ
สร้าง Log แบบนี้:
logger = Logger.new("my_log.txt")
เขียน Log Messages ไป my_log.txt — ถ้าอยากแสดงบน Terminal ใช้ STDOUT
logger = Logger.new(STDOUT)
Logging Messages มี Levels ตามความสำคัญ:
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- UNKNOWN
ทุก Level มี Instance Method ตรงกัน — อยาก Log "info" ทำแบบนี้:
logger.info("I'm reading a RubyGuide about logging!")
Log Entry จริงๆ long อยู่:
# I, [2019-08-08T19:22:00.152079 #642] INFO -- : I'm reading a RubyGuide about logging!
Levels ต่างๆ ช่วย Filter Log File หาเจอเร็ว — และดูจำนวน Errors/Warns ตามเวลา
จัดรูปแบบ Logs ของคุณ
Default Output Format ดี เพราะ Tools สร้างรอบๆ ได้ และเข้าใจง่าย
Log Line อีกครั้ง:
# I, [2019-08-08T19:22:00.152079 #642] INFO -- : test
Components:
- "I" = ตัวอักษรแรกของ Severity Level
- ในวงเล็บ = Timestamp และ Process ID (PID)
- INFO = ชื่อเต็มของ Severity Level
- หลัง Colon = Message ที่ Log จริง
แต่ Format นี้อาจไม่เหมาะทุกคน — Ruby ให้เปลี่ยนได้!
ทำแบบนี้:
logger.formatter = proc { |severity, datetime, progname, msg| "#{severity}, #{datetime}, #{msg}\n" }
Output กลายเป็น:
DEBUG, 2019-08-08 19:39:01 +0200, testing
เพิ่ม Info ที่ช่วยคุณและทีมได้
จำกัดขนาด Log
Logs ใหญ่โตจนเต็ม Disk ถ้าไม่ควบคุม — Disk เต็ม = ระบบผิดปกติหลายอย่าง
มีโซลูชัน! จำกัดขนาด Log ได้
ทำแบบนี้:
MEGABYTE = 1024 ** 2
ONE_HUNDRED_MEGABYTES = MEGABYTE * 100
logger = Logger.new("my_log.txt", 1, ONE_HUNDRED_MEGABYTES)
Parameter 1: ที่บันทึก Log — Parameter 2: จำนวน Log Files ที่เก็บ (Log Rotation) — Parameter 3: Max File Size
อ่านและ Filter Logs
มี Logs แล้ว — อ่านและหาข้อมูลยังไง? Logs = Plain-text Files ใช้ Text-processing Tools อะไรก็ได้
เช่น Grep: Command-line Tool Filter Text Files
grep INFO my_log.txt
ได้ทุกบรรทัดที่ Log เป็น "INFO" — ค้นหาข้อความอื่นแทน "INFO" ก็ได้
Tool อีกตัว: less (กับ -R option) — Scroll ด้วย Keyboard มี Search Function
ยังมี... Tools สำหรับ Log Management และ Search — เช่น Logster Gem ของ Discourse
Summary (สรุป)
คุณเรียนรู้ Logging ใน Ruby — คืออะไร ทำงานยังไง และใช้ยังไง
ตอนนี้ถึงคุณลอง — ขอบคุณที่อ่านครับ!