تسجيل الدخول لـ Rust: أفضل المكتبات والأدوات
تسجيل الدخول هو جزء لا يتجزأ من تطوير أي تطبيق جاد. في نظام Rust البيئي، توجد عدة حلول ناضجة تتيح إدارة مرنة لإخراج الرسائل، وتحديد مستويات الأهمية والتنسيقات. في هذه المقالة، سنستعرض أشهر المكتبات لتسجيل الدخول في Rust، وميزاتها، ونقدم أمثلة على الاستخدام.
1. السمة الأساسية log
مكتبة log (crate log) هي الأساس لجميع أنظمة تسجيل الدخول في Rust. توفر سمة مجردة Log ووحدات ماكرو (info!، warn!، error!، debug!، trace!). بحد ذاتها، لا تقوم بإخراج البيانات - بل تحتاج إلى تطبيق (backend) لذلك.
// Cargo.toml// [dependencies]// log = "0.4"
use log::{info, warn, error};
fn main() { info!("تم تشغيل التطبيق"); warn!("ذاكرة منخفضة: {} MB", 128); error!("خطأ في الاتصال بقاعدة البيانات");}مستويات تسجيل الدخول حسب الأهمية التصاعدية: trace، debug، info، warn، error. افتراضيًا، يتم إخراج الرسائل من مستوى info فما فوق فقط.
2. env_logger - اختيار بسيط وشائع
env_logger هو التطبيق الأكثر شيوعًا لسمة Log. يتم تكوينه عبر متغير البيئة RUST_LOG ويخرج الرسائل إلى تيار الخطأ القياسي (stderr).
// Cargo.toml// [dependencies]// log = "0.4"// env_logger = "0.10"
use log::info;
fn main() { env_logger::init(); info!("تم تهيئة env_logger");}
// التشغيل: RUST_LOG=info cargo runالميزات:
- إعدادات بسيطة - يكفي سطر واحد
env_logger::init(). - تصفية حسب الوحدات:
RUST_LOG=my_crate=debug,other_crate=info. - دعم الإخراج الملون في الطرفية.
- مثالي للأدوات الصغيرة والنماذج الأولية.
3. log4rs - نظير قابل للتخصيص لـ log4j/log4net
log4rs (crate log4rs) هو إطار عمل قوي، مستوحى من Java log4j. يسمح بتكوين تسجيل الدخول عبر ملفات YAML/JSON/TOML أو برمجيًا.
// Cargo.toml// [dependencies]// log = "0.4"// log4rs = "1.2"
use log::info;
fn main() { // التكوين البرمجي log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); info!("تم تكوين log4rs عبر ملف");}
// log4rs.yaml// refresh_rate: 30 seconds// appenders:// stdout:// kind: console// encoder:// pattern: "{d(%Y-%m-%d %H:%M:%S)} {l} - {m}{n}"// file:// kind: file// path: "app.log"// encoder:// pattern: "{d} {l} {t} - {m}{n}"// root:// level: info// appenders:// - stdout// - fileالميزات:
- دعم عدة ملحقات (إخراج إلى ملف، وحدة تحكم، syslog، شبكة).
- تدوير تلقائي للسجلات حسب الحجم أو الوقت.
- تصفية حسب الوحدات، المستويات، والمرشحات المخصصة.
- موصى به لتطبيقات الخادم والخدمات المصغرة.
4. tracing - تسجيل دخول غير متزامن ومنظم
tracing (crate tracing) هو بديل حديث، تم تطويره بواسطة فريق Tokio. يدعم الأحداث المنظمة، والنطاقات (span) لتتبع وقت التنفيذ، والسياقات غير المتزامنة.
// Cargo.toml// [dependencies]// tracing = "0.1"// tracing-subscriber = "0.3"
use tracing::{info, span, Level};use tracing_subscriber::fmt;
fn main() { // تهيئة المشترك fmt::init();
let span = span!(Lev