ما هي مكتبة log لـ Rust؟
مكتبة log هي تجريد قياسي للتسجيل (logging) في نظام Rust البيئي. توفر واجهة خفيفة الوزن (facade) تتيح للمطورين كتابة كود يُنشئ سجلات (logs) دون الارتباط بتطبيق محدد للمُسجّل (logger) (مثل env_logger أو simple_logger أو slog). وهي مشابهة للمكتبات الشهيرة logging في Python، ولكن مع التركيز على الأداء وأمان الذاكرة.
لماذا نحتاج مكتبة log؟
الهدف الرئيسي لـ log هو فصل عملية إنشاء السجلات عن معالجتها. يمكنك استخدام الماكروات info! و warn! و error! في كودك، ثم لاحقًا، عن طريق ربط أحد الخلفيات (مثل env_logger)، توجيه المخرجات إلى وحدة التحكم أو ملف أو نظام مراقبة. هذا مفيد بشكل خاص من أجل:
- تصحيح أخطاء الأنظمة المعقدة
- مراقبة تطبيقات الإنتاج
- إنشاء مكتبات لا ينبغي أن تفرض على المستخدم طريقة التسجيل
التثبيت
أضف إلى Cargo.toml:
[dependencies]log = "0.4"env_logger = "0.10" # للإخراج إلى وحدة التحكمثم نفّذ cargo build.
الوظائف الأساسية
- ماكروات التسجيل:
error!وwarn!وinfo!وdebug!وtrace!— مع دعم تنسيق النصوص كما فيprintln!. - مستويات التصفية: يمكنك تعيين الحد الأدنى للمستوى (مثل الأخطاء فقط) عبر متغير البيئة
RUST_LOG. - قابلية التوسع: دعم المُسجّلات المخصصة من خلال trait
Log. - الأمان: السجلات لا تؤثر على الأداء إذا كان المستوى معطلاً.
مثال كود بلغة Rust
use log::{info, warn, error};
fn main() { // تهيئة المُسجّل (env_logger) env_logger::init();
let user = "Alice"; let status = 200;
info!("المستخدم {} دخل إلى النظام", user); warn!("حالة الاستجابة: {} — ربما ذاكرة تخزين مؤقت قديمة", status); error!("فشل الاتصال بقاعدة البيانات: {}", "timeout");}قم بتشغيله باستخدام RUST_LOG=info cargo run لرؤية جميع الرسائل بمستوى info وما فوق.
متى تستخدمها
مكتبة log مثالية من أجل:
- أي تطبيق Rust يحتاج إلى نظام تسجيل قياسي (CLI، خوادم، أدوات مساعدة).
- المكتبات — بحيث يمكن للمستخدم اختيار الخلفية بنفسه.
- المشاريع المهاجرة من Python: المفهوم مشابه لـ
logging.getLogger().
تجنب استخدام log إذا كنت بحاجة إلى كتابة غير متزامنة في ملف أو سجلات JSON منظمة — في هذه الحالات، tracing أو slog سيكونان أكثر ملاءمة.