Log4JS هي واحدة من أفضل الوحدات في معالجة سجل Node.js. بالمقارنة مع وحدة التحكم في وحدة التحكم أو TJ ، فإن ما يلي لا غنى عنه لمشاريع Node.js التي يتم وضعها في الإنتاج:
ستمنحك هذه المقالة مقدمة شاملة لـ Log4JS ، مما يتيح لك استخدام Log4Js في مشروعك بسهولة ، وسهولة التطوير والتصحيح ، ومراقبة أفضل أو استكشاف الأخطاء وإصلاحها عبر الإنترنت.
اختبار صغير
تظهر لك الأسطر الثلاثة التالية من الكود أسهل استخدام Log4JS:
// file: simplest.jsvar log4js = require ('log4js') ؛ var logger = log4js.getLogger () ؛ logger.debug ("time:" ، date ()) ؛يمكن استدعاء .getLogger () الحصول على مثيل Log4JS لوجبر. استخدام هذه الحالة هو نفس استخدام وحدة التحكم. يمكنك الاتصال .Debug (أيضًا .info ، .error وطرق أخرى) لإخراج سجلات.
تشغيل العقدة simplest.js والإخراج كما يلي:
$ node simplest.js [2016-08-21 00: 01: 24.852] [Debug] [افتراضي]-الوقت: 2016-08-20T16: 01: 24.852z
الوقت: 2016-08-20T16: 01: 24.852Z هو ما نريد الإخراج. يحتوي السابق على المحدد [2016-08-21 00: 01: 24.852] [Debug] [افتراضي] مدرج لاحقًا.
أليس من السهل جدًا استخدامه؟ حسنًا ، قبل الغوص في الاستخدام المتقدم لـ log4js ، دعنا نتعرف أولاً على المفاهيم في log4js.
مستوى
هذا ليس من الصعب فهمه ، إنه تصنيف السجلات. فقط عندما تكون السجلات هرمية يمكن أن تُظهر Log4js بشكل أفضل سجلات لنا (مستويات مختلفة من السجلات تستخدم ألوانًا مختلفة في وحدة التحكم ، مثل الخطأ عادة ما تكون حمراء) ، وعندما يتم الإنتاج ، يمكنك تسرب السجلات بشكل انتقائي ، مثل تجنب بعض المعلومات الحساسة التي تنتمي إلى .DeBugs.
تنقسم سجلات log4js إلى تسعة مستويات ، وأسماء وأوزان كل مستوى هي كما يلي:
{All: New Level (number.min_value ، "All") ، Trace: New Level (5000 ، "Trace") ، Debug: New Level (10000 ، "Debug") ، info: New Level (20000 ، "info") ، warn: new Lever المستوى (9007199254740992 ، "مارك") ، // 2^53 OFF: مستوى جديد (number.max_value ، "Off")}الصورة السابقة:
لا يتم استخدام كل هذين المستويين مباشرة في رمز العمل. السبعة المتبقية هي الطرق السبعة المقابلة لمثيل المسجل ، .trace .debug .info ... وبعبارة أخرى ، عندما تسمي هذه الأساليب ، فإنها تعادل تسوية هذه السجلات. لذلك ، فإن السابق [2016-08-21 00: 01: 24.852] [Debug] [افتراضي]-الوقت: 2016-08-20T16: 01: 24.852Z هو مستوى هذا السجل.
يكتب
يحتوي log4js أيضًا على مفهوم يسمى الفئة (النوع). يمكنك تعيين نوع مثيل المسجل وتمييز السجلات وفقًا لبعد آخر:
// file: set-catetory.jsvar log4js = require ('log4js') ؛ var logger = log4js.getlogger ('example') ؛ logger.debug ("time:" ، new date ()) ؛عند الحصول على مثيل مسجل من خلال getLogger ، فإن المعلمة الوحيدة التي يمكن تمريرها هي LoggerCategory (مثل "مثال"). تحدد هذه المعلمة الفئة التي ينتمي إليها مثيل Logger. هذا هو نفس تصحيح TJ:
var debug = require ('debug') ('worker') ؛ setInterval (function () {debug ('Doing بعض العمل') ؛} ، 1000) ؛في تصحيح "عامل" ، إنه أيضًا تصنيف سجل. حسنًا ، عد وتشغيل العقدة set-catetory.js:
[2016-08-21 01: 16: 00.212] [Debug] مثال-الوقت: 2016-08-20T17: 16: 00.212z
الفرق الوحيد من السابق [2016-08-21 00: 01: 24.852] [Debug] [افتراضي]-الوقت: 2016-08-20T16: 01: 24.852Z هو أن [الافتراضي] قد أصبح مثالاً.
ما هو استخدام الفئة؟ إنه أكثر مرونة من المستوى ويوفر بُعد تمييز ثانٍ للسجلات. على سبيل المثال ، يمكنك تعيين فئة مختلفة لكل ملف ، كما هو الحال في set-catetory.js:
// file: set-catetory.jsvar log4js = require ('log4js') ؛ var logger = log4js.getLogger ('set-catetory.js') ؛ logger.debug ("time:" ، new date ()) ؛يمكنك أن ترى من السجل [2016-08-21 01: 24: 07.332] [Debug] set-catetory.js-الوقت: 2016-08-20T17: 24: 07.331z أن هذا السجل يأتي من ملف set-catetory.js. أو استخدم فئات مختلفة لحزم العقدة المختلفة ، بحيث يمكن تمييز السجلات التي تنشأ عنها الوحدة النمطية.
الجسد
حسنًا ، يحتوي السجل الآن على مستويات وفئات ، والتي تحل مشكلة الدرجات وتصنيف السجلات عند المدخل. في log4js ، يتم حل مشكلة تصدير السجل (أي حيث يتم إخراج إخراج السجل) بواسطة Appender.
الجسد الافتراضي
فيما يلي إعدادات الجسد الافتراضية لـ log4js الداخلية:
// log4js.jsDefaultConfig = {Appenders: [{type: "console"}]}كما ترون ، عندما لا يتم تكوين السجلات بأي شكل من الأشكال ، يتم إخراج السجلات إلى وحدة التحكم افتراضيًا.
قم بإعداد الزائدة الخاصة بك
يمكننا تعيين الجسد الذي نريده من خلال log4js.configure.
// file: custom-appender.jsvar log4js = require ('log4js') ؛ log4js.configure ({appenders: [{type: 'file' ، filename: 'default.log'}]}) var logger = log4js.g.g.getlogger ('custom-appender') ؛في المثال أعلاه ، نقوم بإخراج السجل إلى الملف وتشغيل الرمز. يقوم Log4JS بإنشاء ملف يسمى Default.log في الدليل الحالي. [2016-08-21 08: 43: 21.272] [Debug] appender-الوقت: 2016-08-21T00: 43: 21.272Z يخرجه إلى الملف.
الجاذبية التي توفرها log4js
وحدة التحكم والملف كلاهما يوفرهما Log4JS ، بالإضافة إلى هذا:
DateFile: يتم إخراج السجل إلى ملف ، ويمكن تمرير ملف السجل في وضع تاريخ محدد ، مثل الإخراج إلى الافتراضي 2016-08-21.log اليوم ، والإخراج إلى الافتراضي 2016-08-22.log غدًا ؛
SMTP: سجل الإخراج للبريد الإلكتروني ؛
Mailgun: سجلات الإخراج إلى Mailgun من خلال واجهة برمجة تطبيقات MailGun ؛
يمكن ترشيح Levelfilter من خلال المستوى.
وهلم جرا ، بعض الملاحق الأخرى ، يمكنك رؤية القائمة الكاملة هنا.
تصفية مستويات وفئات
يمكننا ضبط تكوين الجسد وتصفية مستويات السجل والفئات:
// الملف: Level-and-catevory.jsvar log4js = require ('log4js') ؛ log4js.configure ({AppraNders: [{type: 'loglevelfilter' ، level: 'debug' ، end: 'category1' ، appender: log4js.getlogger ('category1') ؛ var logger2 = log4js.getLogger ('category2') ؛ logger1.debug ("الوقت:" ، تاريخ جديد ()) ؛ logger1.trace ("الوقت:" ، تاريخ جديد ())قم بتشغيل ، أضف سجلًا إلى default.log:
[2016-08-21 10: 08: 21.630] [Debug] الفئة 1-الوقت: 2016-08-21T02: 08: 21.629z
لنلقي نظرة على الكود:
استخدم loglevelfilter والمستوى لتصفية مستويات السجل ، وسيتم إنتاج جميع السجلات ذات الأوزان التي تزيد عن أو تساوي التصحيح. هذا هو أيضا أهمية وزن مستوى السجل المذكورة سابقا ؛
حدد الفئة لإخراج السجلات من خلال الفئة. يتم ترشيح السجلات تحت الفئة 2. يقبل التكوين أيضًا صفيفًا ، مثل ["الفئة 1" ، "الفئة 2"] ، بحيث يتم إخراج كلا الفئتين من السجلات إلى الملف.
تَخطِيط
التصميم هو ميزة متقدمة توفرها Log4JS. من خلال التصميم ، يمكننا تخصيص تنسيق كل سجل إخراج. يحتوي log4js على أربعة أنواع من التنسيقات:
MessageSpassThrough: فقط إخراج محتوى السجل ؛
BASIC: سيتم إضافة الوقت ومستوى السجل والفئة قبل محتوى السجل ، وعادة ما تتم إضافة التخطيط الافتراضي للسجل ؛
ملون/ملون: أضف لونًا إلى السجل على أساس الأساس ، تستخدم وحدة التحكم في Appender هذا التخطيط افتراضيًا ؛
النمط: هذا نوع خاص يمكن تعريفه بأي شكل تريده.
مثال على النمط:
// file: التصميم pattern.jsvar log4js = require ('log4js') ؛ log4js.configure ({{adderberers: [{type: 'console' ، layout: {type: 'pattern' ، pattern: '[٪ r] log4js.getLogger ('layout-pattern') ؛ logger.debug ("time:" ، new date ()) ؛٪ r ٪ p $ m $ n هو محدد مدمج لـ log4js. يمكنك استخدام هذا لإخراج بعض معلومات التعريف. لمزيد من التفاصيل ، يمكنك الرجوع إلى وثائق Log4JS.
دعنا نوضح وضع المسجل ، الجسد والتخطيط في صورة.
عملي: الوصول إلى سجل الوصول إلى الإخراج. log لتطبيق العقدة
لتسهيل التحقق من المشكلة ، غالبًا ما يتم تسجيل سجلات طلبات التطبيق والخروج في بيئات الإنتاج. كيفية تنفيذها باستخدام log4js؟ فقط أدخل الرمز:
// file: server.jsvar log4js = require ('log4js') ؛ var express = require ('express') ؛ log4js.configure ({Appenders: [{type: 'datefile' ، filename: 'access.log' ، '-yyyy-mm-dd.log' Express () ؛ app.use (log4js.connectlogger (log4js.getLogger ('Access') ، {Level: log4js.levels.info})) ؛ app.get ('/' ، function (req ، res) {res.send ('Front-end forefour Journal Comment') ؛}) ؛ app.listen (5000) ؛انظر ما فعلناه:
تم تكوين الجاذبية لتحديد سجل مع وصول الفئة من السجل وإخراجه إلى ملف التمرير ؛
يحصل log4js.getLogger ('Access') على مثيل لوجبر مع وصول فئة ، ويمررها إلى log4js.connectlogger الوسيطة. يجمع هذا الوسيطة معلومات الوصول وتطبعها من خلال هذه الحالة.
ابدأ الخادم وزيارة http: // localhost: 5000. ستجد أن هناك ملفًا إضافيًا يسمى Access.log-2016-08-21.log في الدليل ، والذي يحتوي على سجلين:
[2016-08-21 14: 34: 04.752] [info] Access - :: 1 - - "get/http/1.1" 200 18 "" "Mozilla/5.0 (Macintosh ؛ Intel Mac OS X 10_11_0) AppleWebkit/537.36 (khtml ، مثل gecko) chrome/52.0.2743.11
[2016-08-21 14: 34: 05.002] [info] Access - :: 1 - - "get /favicon.ico http/1.1" 404 24 " Chrome/52.0.2743.116 Safari/537.36 "
من خلال التصنيف والوظيفة الجسدية لسجلات Log4JS ، نقوم بإخراج سجلات الوصول إلى ملف تم تحديث التمرير.
لخص
يقدم هذا المقال بشكل شامل استخدام log4js. بالمقارنة مع وحدة التحكم أو أدوات التسجيل البسيطة ، يعد Log4JS أكثر تعقيدًا للاستخدام ، وبالطبع أكثر قوة ، وهو مناسب للتطبيقات على مستوى الإنتاج. إذا كنت مهتمًا ، فيرجى ترك رسالة لتخبرنا. بعد ذلك ، يمكنك تعريفك بكيفية إدارة التكوين في تطبيقات العقدة.