تسجيل الدخول في Rust: أفضل الممارسات للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تسجيل الدخول في تطبيقات Rust: أفضل الممارسات للمبتدئين

\n

تسجيل الدخول هو أحد أهم جوانب تطوير أي تطبيق. فهو يساعد في تتبع الأخطاء، وتحليل الأداء، وفهم سلوك النظام في بيئة الإنتاج. في نظام Rust البيئي، توجد عدة مكتبات قوية لتسجيل الدخول تتيح لك ضبط مخرجات الرسائل بمرونة. في هذه المقالة، سنستعرض أفضل ممارسات تسجيل الدخول في Rust للمبتدئين، بدءًا من المفاهيم الأساسية وصولاً إلى أمثلة كود واقعية.

\n\n

لماذا يعتبر تسجيل الدخول مهمًا في Rust؟

\n

Rust هي لغة برمجة أنظمة تُستخدم غالبًا لبناء تطبيقات عالية التحميل وحساسة. في مثل هذه الأنظمة، قد يؤدي أي خطأ إلى عواقب وخيمة. يتيح لك تسجيل الدخول:

\n
    \n
  • تتبع الأخطاء — حتى لو لم يتعطل التطبيق، ستساعدك السجلات في فهم ما حدث بشكل خاطئ.
  • \n
  • مراقبة الأداء — قياس وقت تنفيذ الوظائف واكتشاف نقاط الضعف.
  • \n
  • تصحيح السيناريوهات المعقدة — في التطبيقات متعددة الخيوط، لا غنى عن السجلات لفهم ترتيب التنفيذ.
  • \n
  • ضمان الشفافية — في بيئة الإنتاج، ستتمكن من رؤية ما يحدث للتطبيق في الوقت الفعلي.
  • \n
\n

في Rust، لا تتضمن المكتبة القياسية مسجل دخول مدمجًا، لكن المجتمع أنشأ حزمًا (مكتبات) ممتازة لهذه المهمة. سنستعرض اثنتين من الأكثر شيوعًا: log + env_logger و tracing.

\n\n

البدء مع حزمة log و env_logger

\n

أسهل طريقة لإضافة تسجيل الدخول إلى تطبيق Rust هي استخدام مزيج من حزمتي log و env_logger. توفر log وحدات ماكرو مجردة لتسجيل الدخول، بينما توفر env_logger تطبيقًا محددًا يمكن ضبطه عبر متغيرات البيئة.

\n

أضف التبعيات إلى ملف Cargo.toml:

\n
[dependencies]\nlog = "0.4"\nenv_logger = "0.10"
\n

الآن مثال بسيط:

\n
use log::{info, warn, error, debug};\n\nfn main() {\n    env_logger::init();\n\n    info!("تم تشغيل التطبيق");\n    debug!("وضع التصحيح نشط");\n    warn!("هذا تحذير");\n    error!("حدث خطأ: {}", "رمز غير معروف");\n}
\n

افتراضيًا، يعرض env_logger رسائل بمستوى error وما فوق فقط. لرؤية جميع المستويات، قم بتعيين متغير البيئة RUST_LOG:

\n
RUST_LOG=debug cargo run
\n

سترى رسائل من جميع المستويات: error و warn و info و debug و trace. يمكنك أيضًا التصفية حسب الوحدات:

\n
RUST_LOG=my_crate=info cargo run
\n

سيؤدي هذا إلى عرض رسائل info وما فوق فقط للحزمة my_crate.

\n\n

تسجيل الدخول المتقدم مع tracing

\n

للتطبيقات الأكثر تعقيدًا (خوادم الويب، الأنظمة غير المتزامنة)، يُنصح باستخدام حزمة tracing. فهي تدعم تسجيل الدخول المنظم، والنطاقات (span) والأحداث (event)، وهو مفيد بشكل خاص لتتبع سلاسل الاستدعاءات في الكود غير المتزامن.

\n

أضف التبعيات:

\n
[dependencies]\ntracing = "0.1"\ntracing-subscriber = "0.3"
\n

مثال باستخدام النطاقات:

\n
use tracing::{info, error, span, Level};\nuse tracing_subscriber;\n\nfn main() {\n    tracing_subscriber::fmt::init();\n\n    let outer_span = span!(Level::INFO, "outer", work_id = 42);\n    let _enter = outer_span.enter();\n\n    info!("نبدأ العمل");\n    process_data();\n    info!("اكتمل العمل");\n}\n\nfn process_data() {\n    let inner_span = span!(Level::DEBUG, "process_data", data_id = 100);\n    let _enter = inner_span.enter();\n\n    // محاكاة خطأ\n    if true {\n        error!("خطأ في معالجة البيانات: ID {}", 100);\n    }\n}

المدونات

توصيات الكتب