Elixir:
การบันทึกล็อก
วิธีการ:
ใน Elixir, วิธีหลักในการบันทึกข้อมูลคือผ่านโมดูล Logger
ที่มีอยู่แล้วในตัว นี่คือวิธีที่คุณสามารถใช้มันได้:
defmodule MyApplication do
require Logger
def do_something_important(param) do
Logger.info("เริ่มกระบวนการสำคัญด้วยพารามิเตอร์: #{param}")
# จำลองการทำงาน
:timer.sleep(1000)
Logger.debug("กระบวนการเสร็จสิ้น")
rescue
error -> Logger.error("เกิดข้อผิดพลาด: #{inspect(error)}")
end
end
# หากต้องการดู logs ของคุณ, เพียงแค่เรียกฟังก์ชัน:
MyApplication.do_something_important("MyParam")
สนิปเพ็ตง่ายๆ นี้แสดงวิธีการบันทึกที่ระดับต่างๆ (info
, debug
, และ error
) เมื่อคุณรันสิ่งนี้, คุณจะไม่เห็นข้อความ debug นอกจากคุณจะตั้งค่าระดับ Logger เป็น :debug
โดยค่าเริ่มต้น, Logger ของ Elixir จะกรองข้อความ log ที่ต่ำกว่า :info
ผลลัพธ์ตัวอย่างที่ระดับ :info
อาจดูเช่นนี้:
14:32:40.123 [info] เริ่มกระบวนการสำคัญด้วยพารามิเตอร์: MyParam
14:32:41.126 [error] เกิดข้อผิดพลาด: %RuntimeError{message: "runtime error"}
ดำดิ่งลึก:
Logger
ของ Elixir เป็นเครื่องมือที่มีตัวตนมาตั้งแต่ช่วงแรกๆ ของภาษา และได้รับอิทธิพลจากระบบการ Logging ของภาษา BEAM อื่นๆ เช่น Erlang โลกเกอร์ให้ระดับการบันทึกข้อมูลต่างๆ – :debug
, :info
, :warn
, และ :error
– และสามารถปรับปรุง (pluggable) ได้, โดยอนุญาตให้ backend ต่างๆ ถูกเชื่อมต่อเข้ามาสำหรับการจัดการข้อความ log
อีกหนึ่งทางเลือกสำหรับ Logger ที่มีอยู่ตั้งแต่แรกสำหรับสถานการณ์ที่ซับซ้อนกว่าคือการใช้ไลบรารีการ Logging เช่น Logstash
หรือ Sentry
สำหรับ Elixir, ซึ่งสามารถให้คุณสมบัติเพิ่มเติมเช่นการติดตามและรวบรวมข้อผิดพลาดในรูปแบบที่เห็นได้ชัดเจนกว่า สำหรับการพัฒนาในเครื่อง, นักพัฒนา Elixir มักพึ่งพาฟังก์ชันของ Logger ที่มีอยู่เนื่องจากความเรียบง่ายและการบูรณาการกับ BEAM VM
ภายใต้ฝา, โมดูล Logger ให้บริการการ Logging แบบอะซิงโครนัสและซิงโครนัส การ Logging แบบอะซิงโครนัส, ซึ่งเป็นค่าเริ่มต้น, ไม่ให้การทำงานของแอปพลิเคชันของคุณถูกรบกวนในระหว่างการบันทึกข้อความ นี่ช่วยให้ระบบ Logging ไม่ส่งผลกระทบต่อประสิทธิภาพอย่างเป็นลบ อย่างไรก็ตาม, การ Logging แบบซิงโครนัสสามารถเปิดใช้งานได้ในกรณีที่คุณต้องการรับรองว่าข้อความถูกบันทึกตามลำดับที่ถูกส่ง
การตั้งค่า Logger สามารถปรับให้เหมาะสมในไฟล์ config/config.exs
ของแอปพลิเคชัน Elixir, ที่คุณสามารถตั้งค่าระดับการ Logging, รูปแบบ, เมตาดาต้า, และอื่นๆ อย่าลืมปรับระดับการ Logging และส่งออกสำหรับสภาพแวดล้อมที่ต่างกัน; คุณคงไม่ต้องการให้บันทึกการ Debug ที่ละเอียดยิบปรากฏในระบบการผลิตของคุณ
ดูเพิ่มเติม:
- เอกสารการแนะนำ Logger อย่างเป็นทางการของ Elixir: https://hexdocs.pm/logger/Logger.html
- โพสต์บล็อกเกี่ยวกับวิธีการ Logging ที่ดีที่สุดของ Elixir: https://blog.appsignal.com/2020/05/06/elixir-logging-tips-and-tricks.html
- Sentry สำหรับ Elixir บน Hex: https://hex.pm/packages/sentry
- บทเรียนของ Elixir School เกี่ยวกับ Logger: https://elixirschool.com/en/lessons/specifics/debugging/#logging