Clojure:
การบันทึกล็อก
วิธีทำ:
Clojure ใช้ประโยชน์จากฟังก์ชันการบันทึกของ Java, แต่คุณสามารถเข้าถึงได้ในวิธีที่เป็น Clojure มากขึ้น ลองดูว่าคุณอาจใช้ clojure.tools.logging
ซึ่งให้การแปลงที่เรียบง่ายกว่าหลายกรอบการทำงานการบันทึก:
ประการแรก, เพิ่มการพึ่งพา clojure.tools.logging
และการใช้งานการบันทึกเช่น log4j
ในไฟล์ project.clj
ของคุณ:
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/tools.logging "1.1.0"]
[log4j/log4j "1.2.17"]]
ตอนนี้, ลองบันทึกข้อความบางส่วน:
(require '[clojure.tools.logging :as log])
(defn compute-answer-to-everything []
(log/debug "เริ่มการคำนวณที่รุนแรง...")
(Thread/sleep 3000) ; จำลองการคำนวณนาน
(log/info "การคำนวณเสร็จสิ้น คำตอบคือ 42.")
42)
(compute-answer-to-everything)
ผลลัพธ์ไม่จะแสดงข้อความ DEBUG
โดยปริยาย เนื่องจากระดับการบันทึกมักถูกตั้งค่าเป็น INFO
:
INFO [your-namespace] - การคำนวณเสร็จสิ้น คำตอบคือ 42.
คุณสามารถกำหนดค่าสำหรับระดับการบันทึกและ appenders ในไฟล์ log4j.properties
เพื่อรับผลลัพธ์ที่ละเอียดยิ่งขึ้นหากต้องการ
ศึกษาลึกลงไป
clojure.tools.logging
ของ Clojure มีมานานแล้วและทำหน้าที่เป็นสะพานระหว่างโค้ด Clojure กับโลกการบันทึกของ Java ตลอดประวัติศาสตร์ Java ได้ผ่านการเปลี่ยนแปลงหลายครั้งและไลบรารีสำหรับการบันทึก เช่น API การบันทึกที่มีอยู่ใน Java, log4j
, slf4j
, และ logback
ใน Clojure, ในขณะที่คุณสามารถใช้กรอบการทำงานการบันทึกของ Java ได้โดยตรง clojure.tools.logging
จะตรวจสอบและมอบหมายไปยังกรอบการทำงานการบันทึกที่พบใน classpath ของคุณ ช่วยให้คุณไม่ต้องผูกติดกับการใช้งานเฉพาะ ซึ่งสามารถช่วยให้โค้ด Clojure ของคุณเป็นแบบพกพาและมีโมดูลาร์มากขึ้น
ทางเลือกที่ clojure.tools.logging
ภายในระบบนิเวศ Clojure รวมถึงไลบรารีเช่น timbre
, ซึ่งเป็นไลบรารีการบันทึกของ Clojure ที่แท้จริงด้วยคุณสมบัติเช่น การหมุนการบันทึก, การกรอง, และการบันทึกแบบอสิงค์โครนัส
รายละเอียดการใช้งานเป็นเรื่องสำคัญเมื่อมาถึงการบันทึกในสภาพแวดล้อมหลายเธรดเช่น Clojure ที่นี่, ความไม่สามารถเปลี่ยนแปลง และการจัดการผลข้างเคียงมีข้อได้เปรียบที่ชัดเจน การบันทึก, เป็นผลข้างเคียง, ควรได้รับความระมัดระวังเพื่อหลีกเลี่ยงจุดอับปางของประสิทธิภาพและรับรองความปลอดภัยของเธรด ซึ่งกรอบการทำงานการบันทึกของ Java มักจะดูแลให้
สุดท้าย, พิจารณาการบันทึกเป็นโครงสร้างข้อมูล ที่บันทึกเป็นข้อมูลโครงสร้าง (เช่น JSON) นี่อาจมีประโยชน์อย่างมากสำหรับการวิเคราะห์และประมวลผลในภายหลัง โดยเฉพาะเมื่อจัดการกับระบบที่กระจายขนาดใหญ่
ดูเพิ่มเติม
หากคุณต้องการเรียนรู้เพิ่มเติม ให้พิจารณาตรวจสอบทรัพยากรเหล่านี้:
- เอกสารการใช้งาน Clojure Tools Logging: https://github.com/clojure/tools.logging
- Timbre, ไลบรารีการบันทึกของ Clojure: https://github.com/ptaoussanis/timbre
- การกำหนดค่า Log4J ใน Clojure: http://clojure-doc.org/articles/tutorials/logging_with_log4j.html
- คู่มือ Logback สำหรับการตั้งค่าขั้นสูง: http://logback.qos.ch/manual/
- คู่มือการบันทึกโครงสร้างใน Clojure: https://corfield.org/blog/2020/04/28/structured-logging/