مقدمة: لماذا نحتاج إلى تسجيل الدخول في TypeScript؟
تسجيل الدخول هو عملية تسجيل الأحداث التي تحدث في التطبيق أثناء تشغيله. بالنسبة لمطور TypeScript، هذه ليست مجرد إضافة، بل أداة أساسية لتصحيح الأخطاء والمراقبة وتحليل سلوك البرنامج. بدون تسجيل دخول مهيأ بشكل صحيح، فإنك تخاطر بإضاعة ساعات في البحث عن أخطاء كان يمكن اكتشافها في دقائق.
في هذه المقالة، سنستعرض أفضل ممارسات تسجيل الدخول للمطورين المبتدئين في TypeScript. ستتعلم كيفية تجاوز مجرد استخدام console.log، وما هي المكتبات التي يجب استخدامها، وكيفية هيكلة السجلات لتكون ذات فائدة حقيقية.
1. أساسيات تسجيل الدخول: من console.log إلى البيانات المنظمة
يبدأ العديد من المبتدئين بـ console.log('حدث خطأ ما'). هذا يعمل، لكنه يتحول بسرعة إلى فوضى. في التطوير الحديث باستخدام TypeScript، من المعتاد استخدام تسجيل الدخول المنظم.
مشاكل console.log البسيط
- عدم وجود مستويات: لا يمكنك تصفية الأخطاء من رسائل التصحيح.
- لا سياق: غير واضح من أي وحدة أو وظيفة جاءت الرسالة.
- ضعف القراءة: في بيئة الإنتاج، غالبًا ما يتم تحليل السجلات بواسطة الآلات وليس البشر.
الخطوة الأولى نحو التنظيم: مستويات تسجيل الدخول
أفضل ممارسة هي استخدام المستويات القياسية:
debug— للتصحيح أثناء التطوير.info— للأحداث العادية (تمت معالجة الطلب، تم تسجيل دخول المستخدم).warn— للمشاكل المحتملة (نقص الذاكرة، API قديم).error— للأعطال الحرجة.
مثال على نهج بسيط ولكنه مفيد بالفعل:
// bad.tsconsole.log('User logged in'); // ❌
// good.tsconst logger = { info: (message: string, meta?: Record<string, unknown>) => { console.log(JSON.stringify({ level: 'info', message, timestamp: new Date().toISOString(), ...meta })); }, error: (message: string, error?: Error) => { console.error(JSON.stringify({ level: 'error', message, stack: error?.stack, timestamp: new Date().toISOString() })); }};
logger.info('User logged in', { userId: 123 }); // ✅هنا نضيف طابعًا زمنيًا ومستوى. يمكن تحليل هذا بالفعل. لكن كتابة هذا الكود يدويًا لكل مشروع غير فعال — استخدم المكتبات الجاهزة.
2. اختيار مكتبة لتسجيل الدخول في TypeScript
توجد عدة مكتبات ممتازة لـ TypeScript. دعنا ننظر إلى الأكثر شيوعًا: Winston و tslog. للمبتدئين، نوصي بـ tslog بسبب بساطته ودعمه الكامل لـ TypeScript.
tslog — الخيار المثالي للمبتدئين
هذه المكتبة مكتوبة بلغة TypeScript وتوفر سجلات جميلة وملونة في وحدة التحكم. لا تتطلب إعدادًا معقدًا.
// التثبيت: npm install tslogimport { Logger } from 'tslog';
const logger = new Logger({ name: 'MyApp' });
logger.info('تم تشغيل التطبيق');logger.warn('الذاكرة تقترب من النفاد');logger.error('خطأ في الاتصال بقاعدة البيانات', { retryCount: 3 });مزايا tslog:
- دعم تلقائي لـ TypeScript (الأنواع مضمنة).
- إخراج جميل في وحدة التحكم مع ألوان.
- مستويات تسجيل مدمجة.
- حد أدنى للدخول.
Winston — قوي ولكنه أكثر تعقيدًا
Winston هو معيار الصناعة. يسمح بإرسال السجلات إلى الملفات وقواعد البيانات و Elasticsearch. ومع ذلك، للمشاريع البسيطة، قد يكون إعداده مبالغًا فيه.
// التثبيت: npm install winstonimport winston from 'winston';
const logger = winston.createLogger({ level: 'info', format: winston.form