سجل

أداة Sumor Cloud.
وثائق إضافية

هذه سجل خفيف لـ Node.JS. يمكنه إخراج السجلات بمستويات مختلفة، ويمكنك تخصيص النطاق والمعرف والتوقيت.

CI Test Coverage Audit

التثبيت

npm i @sumor/logger --save

الشروط الأساسية

إصدار Node.JS

يتطلب إصدار Node.JS 18.x أو أعلى

يتطلب إصدار Node.JS ES module

نظرًا لأن هذه الحزمة مكتوبة في ES module، يرجى تغيير الكود التالي في ملف package.json الخاص بك:

{
  "type": "module"
}

الاستخدام

الاستخدام العام

import Logger from '@sumor/logger'
const logger = new Logger()

logger.trace('Hello World!')
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 TRACE MAIN - Hello World!

تغيير النطاق

في بعض الحالات، نحتاج إلى تصنيف السجلات. يُستخدم النطاق لهذا الغرض.

import Logger from '@sumor/logger'
const logger = new Logger({
  scope: 'DEMO'
})
logger.trace('Hello World!')
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 TRACE DEMO - Hello World!

تحديد المستخدم

في بعض الحالات، نحتاج إلى تحديد المستخدم. يُستخدم المعرف لهذا الغرض.

import Logger from '@sumor/logger'
const logger = new Logger({
  id: 'USER001'
})
logger.trace('Hello World!')
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 TRACE MAIN USER001 - Hello World!

تغيير المستوى

في معظم الأوقات، نحتاج إلى إخراج سجلات بمستوى معين. ثم يمكننا تقرر ما إذا كان يجب تخزينها وعرضها أم لا.

import Logger from '@sumor/logger'
const logger = new Logger()
logger.trace('Hello World!') // trace هو أدنى مستوى، ستُخرج كل السجلات
logger.debug('Hello World!')
logger.info('Hello World!')
logger.warn('Hello World!')
logger.error('Hello World!')
logger.fatal('Hello World!') // fatal هو أعلى مستوى، ستُخرج فقط الأخطاء الحرجة

تغيير التوقيت

import Logger from '@sumor/logger'
const logger1 = new Logger({
  offset: 2 * 60 // الإزاحة UTC+2 هي 2 ساعات
})
logger1.info('Hello World!')
// سترون الناتج التالي:
// 2020-01-01 02:00:00.000 INFO MAIN - Hello World!

const logger2 = new Logger({
  offset: 8 * 60 // الإزاحة UTC+8 هي 8 ساعات
})
logger2.info('Hello World!')
// سترون الناتج التالي:
// 2020-01-01 08:00:00.000 INFO MAIN - Hello World!

التعريفات المحددة مسبقًا

import Logger from '@sumor/logger'
const code = {
  trace: {
    HTTP_ACCESS: 'المستخدم يوصل عبر HTTP وعنوان IP هو {ip}'
  },
  debug: {
    USER_TOKEN_LOADED: 'تم قراءة معلومات تسجيل الدخول للمستخدم ومعرف المستخدم هو {id}'
  },
  info: {
    USER_LOGIN: 'يسجل المستخدم الدخول ومعرف المستخدم هو {id}'
  },
  warn: {
    USER_LOGOUT: 'يسجل المستخدم الخروج ومعرف المستخدم هو {id}'
  },
  error: {
    USER_LOGIN_FAILED: 'فشل تسجيل دخول المستخدم ومعرف المستخدم هو {id}'
  },
  fatal: {
    USER_LOGIN_BLOCKED: 'تم منع تسجيل دخول المستخدم ومعرف المستخدم هو {id}'
  }
}
const i18n = {
  zh: {
    USER_LOGIN: 'المستخدم يسجل الدخول ومعرف المستخدم هو {id}'
  }
}
const logger1 = new Logger({
  code,
  i18n
})

logger1.code('USER_LOGIN', { id: 'USER001' })
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 INFO MAIN - يسجل المستخدم الدخول ومعرف المستخدم هو USER001

const logger2 = new Logger({
  code,
  i18n,
  language: 'zh-US'
})

logger2.code('USER_LOGIN', { id: 'USER001' })
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 INFO MAIN - يسجل المستخدم الدخول ومعرف المستخدم هو USER001

const logger3 = new Logger({
  code,
  i18n,
  language: 'zh-CN'
})

logger3.code('USER_LOGIN', { id: 'USER001' })
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 INFO MAIN - المستخدم يسجل الدخول ومعرف المستخدم هو USER001

ضبط لغة عالمية

process.env.LANGUAGE = 'zh-CN'
import Logger from '@sumor/logger'

const code = {
  info: {
    USER_LOGIN: 'المستخدم يسجل الدخول ومعرف المستخدم هو {id}'
  }
}
const i18n = {
  zh: {
    USER_LOGIN: 'المستخدم يسجل الدخول ومعرف المستخدم هو {id}'
  }
}
const logger = new Logger({
  code,
  i18n
})

logger.code('USER_LOGIN', { id: 'USER001' })
// سترون الناتج التالي:
// 2020-01-01 00:00:00.000 INFO MAIN - المستخدم يسجل الدخول ومعرف المستخدم هو USER001

تصفية المستوى

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

import Logger from '@sumor/logger'
const logger = new Logger({
  level: 'info'
})
logger.trace('Hello World!') // trace هو أدنى مستوى، لن يُخرج
logger.debug('Hello World!') // debug أقل من info، لن يُخرج
logger.info('Hello World!') // info هو نفس info، سيتم الإخراج
logger.warn('Hello World!') // warn أعلى من info، سيتم الإخراج
logger.error('Hello World!') // error أعلى من info، سيتم الإخراج
logger.fatal('Hello World!') // fatal هو أعلى مستوى، سيتم الإخراج

عند استخدام هذه المكتبة عبر مكتبات متعددة، يمكنك استخدام الكود التالي:

import Logger from '@sumor/logger'
const logger = new Logger()
process.env.LOG_LEVEL = 'info'

logger.trace('Hello World!') // trace هو أدنى مستوى، لن يُخرج
logger.debug('Hello World!') // debug أقل من info، لن يُخرج
logger.info('Hello World!') // info هو نفس info، سيتم الإخراج
logger.warn('Hello World!') // warn أعلى من info، سيتم الإخراج
logger.error('Hello World!') // error أعلى من info، سيتم الإخراج

process.env.LOG_LEVEL = 'warn' // تغيير مستوى السجل في الوقت الحقيقي
logger.info('Hello World!') // info أقل من warn، لن يُخرج