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) นี่อาจมีประโยชน์อย่างมากสำหรับการวิเคราะห์และประมวลผลในภายหลัง โดยเฉพาะเมื่อจัดการกับระบบที่กระจายขนาดใหญ่

ดูเพิ่มเติม

หากคุณต้องการเรียนรู้เพิ่มเติม ให้พิจารณาตรวจสอบทรัพยากรเหล่านี้: