winston

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

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

ابدأ الدورة
```html

ما هو winston ولماذا تحتاجه؟

Winston هي المكتبة الأكثر شيوعاً لتسجيل السجلات (logging) في بيئة Node.js. توفر واجهة برمجة تطبيقات (API) بسيطة وشاملة تتيح لك تسجيل السجلات بمستويات أهمية مختلفة، وتنسيقها، وإرسالها إلى وجهات متعددة (الكونسول، الملفات، قواعد البيانات، الخدمات الخارجية). على عكس console.log البسيط، يمنحك winston تحكماً كاملاً في عملية التسجيل: يمكنك ضبط تدوير السجلات حسب الحجم أو التاريخ، وتصفية الرسائل حسب المستوى (info, warn, error, debug)، وإضافة بيانات وصفية (الوقت، معرف الطلب)، وحتى استخدام عدة وسائل نقل (transports) في وقت واحد. إنها أداة لا غنى عنها للمراقبة، وتصحيح الأخطاء، والتدقيق في تطبيقات الإنتاج (production).

التثبيت

قم بتثبيت winston عبر npm أو yarn:

npm install winston# أوyarn add winston

الوظائف الأساسية

  1. مستويات التسجيل: error, warn, info, http, verbose, debug, silly.
  2. وسائل النقل (Transports): Console, File, HTTP, Stream ونقل مخصصة.
  3. التنسيقات: JSON، نص بسيط، طوابع زمنية، إخراج ملون.
  4. دمج وسائل نقل متعددة: مثلاً، الأخطاء في ملف، و info في الكونسول.
  5. وسائل نقل وتنسيقات مخصصة: يمكن التكامل مع Logstash, Sentry, Papertrail وغيرها.
  6. تدوير السجلات: عبر الوحدة الإضافية winston-daily-rotate-file.
  7. الاستثناءات والرفض غير المعالج (unhandled rejection): اعتراض تلقائي للأخطاء غير المعالجة.

مثال كود بلغة JavaScript (Node.js)

const winston = require('winston');

// إنشاء مسجل (logger)const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});

// الاستخدامlogger.info('الخادم يعمل على المنفذ 3000');\logger.warn('ذاكرة غير كافية', { memoryUsage: process.memoryUsage() });try { throw new Error('حدث خطأ ما');} catch (err) { logger.error('خطأ أثناء معالجة الطلب', { error: err.message, stack: err.stack });}

متى تستخدمه

Winston مثالي لأي مشروع Node.js يتطلب تسجيلاً منظماً: خوادم الويب (Express, Koa)، الخدمات المصغرة (microservices)، أدوات سطر الأوامر (CLI)، البوتات، عمليات ETL. إنه مفيد بشكل خاص في بيئة الإنتاج (production) حيث تحتاج إلى جمع السجلات مركزياً، وتحليل الأخطاء، والعثور على المشكلات بسرعة. إذا كان مشروعك يستخدم TypeScript، فإن winston يتمتع بدعم كامل للأنواع (types).

بدائل أخرى: pino (أسرع، أصغر حجماً)، log4js (إعدادات عبر XML/JSON)، bunyan (سجلات JSON). لكن winston يظل الحل الأكثر مرونة وانتشاراً.

```

توصيات