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

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

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

ابدأ الدورة

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



تسجيل السجلات هو مكون بالغ الأهمية لأي تطبيق خادم يعمل على Node.js. فهو يسمح بتتبع الأخطاء، وتحليل الأداء، ومراجعة إجراءات المستخدمين، وتصحيح السيناريوهات المعقدة. في هذه المقالة، سنستعرض أفضل المكتبات لتسجيل السجلات في Node.js، وميزاتها، وإعداداتها، وأمثلة على استخدامها.



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

Node.js هي بيئة غير متزامنة حيث يمكن أن تحدث الأخطاء في دوال الاسترجاع (callbacks)، أو الوعود (promises)، أو الأحداث. بدون تسجيل سجلات عالي الجودة، فإنك تخاطر بفقدان معلومات مهمة حول الأعطال. يساعد تسجيل السجلات المُعد بشكل صحيح في:

  • العثور على الأخطاء وإصلاحها بسرعة في بيئة الإنتاج (production)
  • مراقبة الأداء ونقاط الضعف
  • الامتثال لمتطلبات الأمان والتدقيق
  • تحليل سلوك المستخدمين


المعايير الرئيسية لاختيار المكتبة

عند اختيار أداة لتسجيل السجلات، يجب الانتباه إلى:

  • الأداء — الحد الأدنى من التأثير على سرعة عمل التطبيق
  • مرونة الناقلات (transports) — إمكانية إخراج السجلات إلى وحدة التحكم، الملفات، قواعد البيانات، الخدمات الخارجية
  • مستويات تسجيل السجلات — من debug إلى fatal
  • التنسيق — JSON، نصي، مخصص
  • دعم عدم التزامن — كتابة غير مانعة (non-blocking)


أفضل 4 مكتبات لتسجيل السجلات في Node.js



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: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});

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

الإيجابيات: مجتمع ضخم، مرونة، ناقلات جاهزة لـ Elasticsearch و Logstash و MongoDB.
السلبيات: أبطأ قليلاً من البدائل تحت الأحمال العالية.



2. Pino — صاحب الرقم القياسي في السرعة

Pino هو مسجل سجلات فائق السرعة تم إنشاؤه مع التركيز على الأداء. فهو يولد السجلات بتنسيق JSON وهو أسرع من Winston بمقدار 5-10 مرات.

التثبيت:

npm install pino

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

const pino = require('pino');

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

logger.info({ user: 'admin' }, 'قام المستخدم بتسجيل الدخول إلى النظام');logger.error(new Error('صلاحيات غير كافية'), 'تم رفض الوصول');

الإيجابيات: تأثير ضئيل على الأداء، دعم ممتاز لعدم التزامن، تكامل مع Elastic.
السلبيات: إعداد التنسيقات المخصصة أكثر صعوبة مقارنة بـ Winston.



3. Bunyan — البساطة والتنظيم الهيكلي

Bunyan هي مكتبة خفيفة من Joyent تقوم بتوليد سجلات JSON منظمة. وهي مثالية لهندسة الخدمات المصغرة (microservices).

التثبيت:

npm install bunyan

مثال:

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

توصيات