Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Ruby Logging: ติดตาม Events และ Errors อย่างมีประสิทธิภาพ

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 — คืออะไร ทำงานยังไง และใช้ยังไง

ตอนนี้ถึงคุณลอง — ขอบคุณที่อ่านครับ!