Fish Shell:
การบันทึกล็อก

วิธีทำ:

ใน Fish, การบันทึกสามารถทำได้ง่ายด้วยการเปลี่ยนทิศทางของกระแสผลลัพธ์มาตรฐานและข้อผิดพลาดไปยังไฟล์ เรามาทำการบันทึกเวลาเริ่มต้นและเวลาสิ้นสุดของสคริปต์ของเรา

function log_start
  echo (date "+%Y-%m-%d %H:%M:%S") " - สคริปต์เริ่มทำงาน" >> my_app.log
end

function log_end
  echo (date "+%Y-%m-%d %H:%M:%S") " - สคริปต์สิ้นสุดการทำงาน" >> my_app.log
end

log_start
# ... งานของสคริปต์ของคุณ ...
log_end

cat my_app.log

นี่คือสิ่งที่คุณจะเห็นใน my_app.log:

2023-04-01 10:35:47  - สคริปต์เริ่มทำงาน
2023-04-01 10:36:02  - สคริปต์สิ้นสุดการทำงาน

สำหรับการบันทึกขั้นสูง, คุณสามารถใช้ฟังก์ชันพร้อมพารามิเตอร์สำหรับระดับบันทึกและข้อความ:

function log_message --argument message
  switch "$argv[1]"
    case 'INFO' 'WARN' 'ERROR'
      set log_level $argv[1]
    case '*'
      set log_level 'DEBUG'
  end
  set log_msg (string join " " $argv[2..-1])
  echo (date "+%Y-%m-%d %H:%M:%S") "[$log_level]" $log_msg >> my_app.log
end

log_message INFO "นี่คือข้อความแบบข้อมูล"
log_message ERROR "มีบางอย่างผิดพลาด!"

ตัวอย่างการแสดงผลใน my_app.log จะเป็น:

2023-04-01 10:35:47 [INFO] นี่คือข้อความแบบข้อมูล
2023-04-01 10:35:49 [ERROR] มีบางอย่างผิดพลาด!

ดำดิ่งลึกลงไป

ในอดีต, การบันทึกในสคริปต์ Shell ทำได้ด้วยการใช้คำสั่ง echo อย่างมากมาย และในขณะที่นี้ยังคงเป็นตัวเลือกหนึ่ง, การนำไปใช้งานระบบที่ซับซ้อนกว่านั้นอาจเป็นความท้าทาย Fish ไม่มีระบบบันทึกอย่างเป็นทางการเช่นเดียวกับ shells หรือภาษาโปรแกรมอื่นๆ ดังนั้นบ่อยครั้งคุณต้องสร้างขึ้นเอง

ทางเลือกของคำสั่ง echo ใน Fish สำหรับการบันทึก ได้แก่ เครื่องมือ Unix เช่น syslog หรือ logger ซึ่งเชื่อมต่อกับ daemon ของระบบบันทึก, ให้วิธีการที่เข้ากันได้มากขึ้นสำหรับการบันทึกเหตุการณ์ระดับระบบ

ความเรียบง่ายของ Fish ช่วยให้คุณสร้างฟังก์ชันเพื่อจัดการกับระดับความละเอียดของการบันทึก, กำหนดระดับต่างๆ ที่คุณสามารถเปิดหรือปิดได้ บางการนำไปใช้งานอาจรวมถึงชื่อสคริปต์, หมายเลขบรรทัด, และเวลาที่บันทึก, ซึ่งทำให้ง่ายต่อการติดตามกลับไปยังขั้นตอนที่นำไปสู่เหตุการณ์

ดูเพิ่มเติม