ما هو tracing ولماذا هو مطلوب؟
tracing هو إطار عمل قوي لأدوات المراقبة والتتبع لتطبيقات Rust. على عكس التسجيل البسيط، يوفر tracing بيانات منظمة حول تنفيذ البرنامج، مما يسمح بتتبع ليس فقط الرسائل ولكن أيضًا السياق، والسبانات (span) والأحداث. هذا مفيد بشكل خاص لتشخيص الأداء، والأنظمة الموزعة، والخدمات المصغرة.
الإمكانيات الأساسية
- السبانات (spans): تتبع الفترات الزمنية لتنفيذ العمليات (مثل معالجة طلب HTTP).
- الأحداث (events): سجلات نقطية مع سياق (المستوى، الحقل، الوقت).
- البيانات المنظمة: دعم الحقول (key-value) للمعالجة الآلية.
- عدم التزامن: توافق كامل مع tokio و async/await.
- التصفية: إدارة ديناميكية لمستويات التسجيل (trace, debug, info, warn, error).
التثبيت
أضف إلى Cargo.toml:
[dependencies]tracing = "0.1"tracing-subscriber = "0.3"مثال كود بلغة Rust
use tracing::{info, span, Level};use tracing_subscriber::FmtSubscriber;
fn main() { // تهيئة المشترك (الإخراج إلى stdout) let subscriber = FmtSubscriber::builder() .with_max_level(Level::TRACE) .finish(); tracing::subscriber::set_global_default(subscriber) .expect("فشل تعيين المشترك العام");
// إنشاء سبان للعملية let span = span!(Level::INFO, "main_operation", user_id = 42); let _guard = span.enter();
// تسجيل حدث info!("بدء معالجة الطلب");
// سبان متداخل let inner_span = span!(Level::DEBUG, "sub_task", task_id = "calc"); let _inner_guard = inner_span.enter(); tracing::event!(Level::TRACE, "تنفيذ المهمة الفرعية"); drop(_inner_guard);
info!("تم الانتهاء من الطلب");}الإخراج في الطرفية (مع الطوابع الزمنية والسياق):
2025-03-22T10:00:00.123Z INFO main_operation{user_id=42}: بدء معالجة الطلب2025-03-22T10:00:00.124Z TRACE main_operation{user_id=42}:sub_task{task_id="calc"}: تنفيذ المهمة الفرعية2025-03-22T10:00:00.125Z INFO main_operation{user_id=42}: تم الانتهاء من الطلبمتى تستخدم tracing؟
- الخدمات المصغرة: تتبع سلاسل الطلبات عبر سبانات موزعة (مثل استخدام opentelemetry).
- الأنظمة عالية التحميل: استبدال التسجيل القياسي لتقليل النفقات العامة.
- تصحيح أخطاء الكود غير المتزامن: ترتبط السبانات تلقائيًا بمهام tokio.
- المراقبة في الإنتاج: التكامل مع Grafana, Jaeger, Datadog من خلال تصدير التتبعات (traces).
مكتبة tracing هي المعيار الفعلي للمراقبة في نظام Rust البيئي. تُستخدم في مشاريع مثل tokio, hyper, actix-web و axum.
```