Rust:
การบันทึกล็อก
วิธีการ:
มาตั้งค่าสถานการณ์การ log พื้นฐานใน Rust โดยใช้ log
crate, ซึ่งเตรียมเฟซาดสำหรับการ log, และ env_logger
, การเตรียมการล็อกสำหรับ log
crate ขั้นแรก, เพิ่มพวกเขาไปยัง Cargo.toml ของคุณ:
[dependencies]
log = "0.4.14"
env_logger = "0.9.0"
ตอนนี้, ตั้งค่าและเริ่มต้น logger ใน main.rs
ของคุณ:
use log::{info, warn};
fn main() {
env_logger::init();
info!("นี่คือข้อความแจ้งข้อมูล");
warn!("นี่คือข้อความเตือน");
}
เรียกใช้แอพของคุณด้วย RUST_LOG=info cargo run
, และคุณจะเห็นผลลัพธ์:
INFO: นี่คือข้อความแจ้งข้อมูล
WARN: นี่คือข้อความเตือน
ทดลองเปลี่ยนแปลงตัวแปรสภาพแวดล้อม RUST_LOG
โดยการตั้งค่าเป็น error
, warn
, info
, debug
, หรือ trace
เพื่อควบคุมความละเอียดของ log ของคุณ
การดำเนินการลึก
ความคิดของการ Log ไม่ใช่สิ่งใหม่; มันได้มีมาตั้งแต่ยุคแรกๆ ของการคอมพิวเตอร์ ก่อนที่การ log จะเป็นที่นิยมในซอฟต์แวร์, นักพัฒนาพึ่งพาวิธีการพื้นฐานเช่นคำสั่งพิมพ์หรือเครื่องมือ debugger เพื่อติดตามการดำเนินการโปรแกรม เมื่อโปรแกรมมีความซับซ้อนเพิ่มขึ้น, ก็เช่นเดียวกับความต้องการสำหรับวิธีการ log ที่มีโครงสร้างมากขึ้น
ใน Rust, log
crate ซ่อนรายละเอียดการดําเนินการ log, อนุญาตให้นักพัฒนาเสียบส่วนปลายที่แตกต่างกัน ในขณะที่ env_logger
เป็นทางเลือกที่พบบ่อย, ยังมีตัวเลือกอื่น ๆ เช่น fern
, slog
, หรือ tracing
แต่ละตัวมีชุดคุณสมบัติและตัวเลือกการกําหนดค่าของตัวเอง
บางประเด็นที่ควรพิจารณาเมื่อนำการ log มาใช้ประกอบไปด้วย:
ระดับ Log: การควบคุมความละเอียดสําคัญมาก Rust’s
log
crate กำหนดระดับ log หลายระดับ: error, warn, info, debug, และ trace, ในลำดับความรุนแรงที่ลดลงประสิทธิภาพ: การ Log อาจส่งผลต่อประสิทธิภาพ สําคัญต้องใช้อย่างรอบคอบ, โดยทำให้แน่ใจว่าจะหลีกเลี่ยงการ log ในเส้นทางที่สำคัญต่อประสิทธิภาพหรือ log ที่ละเอียดเกินไปในการผลิต
Logging ที่มีโครงสร้าง: แนวปฏิบัติที่ทันสมัยรวมถึงการ log ที่มีโครงสร้าง, ที่ไวต์ล็อกในรูปแบบที่เครื่องสามารถอ่านได้เช่น JSON ห้องสมุดเช่น
slog
อนุญาตให้มีการ log ที่มีโครงสร้างใน Rust, ซึ่งสามารถถูกดัชนีและสืบค้นโดยใช้ระบบการจัดการ log เช่น ELK Stack หรือ SplunkLogging แบบอะซิงโครนัส: เพื่อลดผลกระทบต่อแอพพลิเคชั่นหลัก, การ log สามารถทำได้แบบอะซิงโครนัส ซึ่งบ่อยครั้งที่ทำโดยให้ห้องสมุดการ log เขียนลงในคิวในหน่วยความจำ, และกระบวนการแยกต่างหากประมวลผลคิวและเขียน log ไปยังจุดหมาย
การกำหนดค่า: หลายเฟรมเวิร์กการ log สนับสนุนการกำหนดค่าผ่านตัวแปรสภาพแวดล้อม, ไฟล์การกำหนดค่า, และ/หรือโค้ด ความยืดหยุ่นนี้เป็นสิ่งสำคัญสำหรับการปรับเอาต์พุตในสภาพแวดล้อมที่แตกต่างกัน (การพัฒนา, staging, การผลิต)
ดูเพิ่มเติม
- เอกสาร
log
crate: https://docs.rs/log/ - เอกสาร
env_logger
crate: https://docs.rs/env_logger/ - หน้าการ log ของ Rust by Example: https://doc.rust-lang.org/rust-by-example/std_misc/log.html
slog
crate, กรอบการทำงานการ log ทางเลือก: https://github.com/slog-rs/slog- Tracing, กรอบการทำงานสำหรับเครื่องมือรัสต์: https://crates.io/crates/tracing