تسجيل الدخول لجافا سكريبت (Node.js): أفضل الحلول

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

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

ابدأ الدورة

تسجيل الدخول لجافا سكريبت (Node.js): أفضل الحلول



تسجيل الدخول هو أساس مراقبة وتصحيح أي تطبيق ويب. في عالم Node.js، توجد عدة مكتبات ناضجة وشائعة تتيح لك ضبط جمع وتنسيق وتخزين السجلات بمرونة. في هذه المقالة، سنستعرض أربعة من أفضل الحلول: Winston، Pino، Bunyan و Morgan. ستتعرف على ميزاتها ونقاط قوتها وستحصل على أمثلة عملية لاستخدامها.



لماذا نحتاج إلى تسجيل الدخول في Node.js؟

على عكس جافا سكريبت في المتصفح، يعمل تطبيق الخادم دون وصول مباشر إلى وحدة تحكم المطور. تتيح السجلات ما يلي:

  • تتبع الأخطاء والاستثناءات في الوقت الفعلي.
  • تحليل الأداء (وقت الاستجابة، الطلبات).
  • تسجيل أحداث التدقيق (دخول المستخدم، تغيير البيانات).
  • التكامل مع أنظمة المراقبة الخارجية (ELK، Datadog، Splunk).


1. Winston — المعيار العالمي

Winston هي أشهر مكتبة تسجيل دخول لـ Node.js. ميزتها الرئيسية هي الناقلات (أين تكتب السجلات) و التنسيقات (كيفية عرضها).

التثبيت:

npm install winston


مثال على الإعداد الأساسي:

const winston = require('winston');

const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'combined.log' }) ]});

logger.info('الخادم يعمل على المنفذ 3000');logger.error('خطأ في الاتصال بقاعدة البيانات', { db: 'main' });


الإمكانيات الرئيسية:

  • دعم ناقلات متعددة (وحدة التحكم، ملف، HTTP، MongoDB، Elasticsearch).
  • تنسيقات مخصصة (JSON، نص عادي، مع طوابع زمنية).
  • تصفية حسب المستوى (error، warn، info، verbose، debug، silly).
  • إنشاء مسجلات فرعية لوحدات مختلفة.

متى تختاره: للمشاريع المعقدة التي تتطلب توجيهًا مرنًا للسجلات وتكاملًا مع الخدمات الخارجية.



2. Pino — مسجل فائق السرعة

Pino مصمم لأقصى أداء. إنه أسرع من Winston بمقدار 5-10 مرات بفضل استخدام JSON المنظم وتقليل النفقات العامة.

التثبيت:

npm install pino


مثال على الاستخدام:

const pino = require('pino');

const logger = pino({ level: 'info', transport: { target: 'pino-pretty', // لإخراج جميل في وحدة التحكم options: { colorize: true } }});

logger.info({ user: 42 }, 'المستخدم دخل إلى النظام');logger.error(new Error('فشل تحميل الملف'));


الميزات:

  • استهلاك ضئيل لوحدة المعالجة المركزية والذاكرة.
  • دعم مدمج لـ pino-pretty للتطوير.
  • العمل مع التدفقات (streams) للتكامل مع أدوات أخرى.
  • تسلسل تلقائي للكائنات دون فقدان الأداء.

متى تختاره: للتطبيقات عالية التحميل (API، الخدمات المصغرة)، حيث كل ملي ثانية مهمة.



3. Bunyan — سجلات منظمة من مبتكري Joyent

Bunyan من شركة Joyent (مبتكري Node.js) يركز على هيكل صارم للسجلات. كل رسالة هي كائن JSON مع حقول إلزامية (hostname، pid، time).

التثبيت:

npm install bunyan


مثال:

const bunyan = require('bunyan');

const logger = bunyan.createLogger({ name: 'myapp', streams: [ { level: 'info', stream: process.stdout }, { level: 'error', path: 'error.log' } ]});

logger.info('تم بدء تشغيل التطبيق');logger.error({ err: new Error('فشل الاتصال') }, 'خطأ في قاعدة البيانات');


الميزات الرئيسية:

  • تنسيق JSON صارم مع حقول إلزامية.
  • أداة سطر أوامر مدمجة bunyan لتنسيق السجلات وترشيحها.
  • دعم الحلقات (rings) لتجميع السجلات ذات الصلة.
  • إخراج سهل القراءة مع تلوين بناءً على المستوى.

متى تختاره: للمشاريع التي تتطلب تحليلاً عميقًا للسجلات ومعايير صارمة للهيكل.



4. Morgan — مسجل طلبات HTTP

Morgan هو وسيط (middleware) متخصص لتسجيل طلبات HTTP في Express.js. إنه مثالي لتتبع الطلبات الواردة وأكواد الاستجابة وأوقات المعالجة.

التثبيت:

npm install morgan


مثال على الاستخدام مع Express:

const express = require('express');const morgan = require('morgan');

const app = express();

app.use(morgan('combined')); // تنسيق Apache القياسي

app.get('/', (req, res) => { res.send('مرحباً بالعالم!');});

app.listen(3000);


التنسيقات المدمجة:

  • combined — تنسيق Apache القياسي مع معلومات مفصلة.
  • common — تنسيق Apache المبسط.
  • dev — تنسيق ملون للتطوير مع أكواد الحالة.
  • short و tiny — تنسيقات موجزة.

متى تختاره: لتطبيقات Express.js حيث تحتاج إلى تتبع الطلبات بسرعة دون إعداد معقد.



الخلاصة: أي مكتبة تختار؟

اختيار المكتبة يعتمد على احتياجات مشروعك:

  • Winston — الخيار الأفضل للمشاريع المعقدة ذات متطلبات تسجيل الدخول المتنوعة.
  • Pino — مثالي للأنظمة عالية الأداء حيث السرعة هي الأولوية.
  • Bunyan — مناسب للفرق التي تقدر الهيكل الصارم وأدوات التحليل القوية.
  • Morgan — لا غنى عنه لتسجيل طلبات HTTP في Express.js.

في الممارسة العملية، غالبًا ما يتم الجمع بين هذه المكتبات: على سبيل المثال، استخدام Morgan للطلبات و Winston أو Pino لسجلات التطبيق. جرب كل حل واختر ما يناسبك!

توصيات