Logging می تواند ابزاری ارزشمند برای عیب یابی مشکلات و تجزیه و تحلیل استفاده از برنامه باشد. این بسته ها کمک می کنند تا آن را به یک فرآیند ساده تبدیل کنید. پکیج های ورود به Node.js را در ادامه بررسی کرده ایم.
ورود به سیستم مناسب یک جنبه حیاتی در ساخت و نگهداری برنامه های کاربردی وب است. این می تواند به شما در ردیابی خطاها، تشخیص مشکلات عملکرد و درک نحوه تعامل کاربران با برنامه شما کمک کند.
Node.js دارای بستههای گزارشگیری بسیاری است که به شما در ایجاد و مدیریت گزارشهای ساختاریافته کمک میکند.
وینستون
Winston یک کتابخانه Node.js است که قابلیت ورود به سیستم انعطاف پذیر، از جمله حمل و نقل های متعدد را ارائه می دهد. “حمل و نقل” یک وسیله ذخیره سازی برای سیاهههای مربوط به شما است.
وینستون از انتقال کنسول، فایل و شبکه پشتیبانی می کند. این بدان معنی است که می توانید گزارش های خود را در کنسول چاپ کنید، آنها را در یک فایل بنویسید، یا آنها را از طریق یک شبکه ارسال کنید. با استفاده از سطوح ورود به سیستم وینستون، می توانید حمل و نقل های سفارشی ایجاد کنید و سیاهه های مربوط را بر اساس شدت فیلتر کنید.
شما می توانید Winston را به عنوان یک وابستگی در فهرست پروژه خود با استفاده از npm، مدیر بسته جاوا اسکریپت، نصب کنید. این دستور را اجرا کنید:
بلوک کد زیر نحوه راه اندازی یک سیستم ورود به سیستم اولیه را با استفاده از Winston نشان می دهد. شما می توانید گزارش ها را برای مکان های مختلف و سطوح مختلف شدت تعریف کنید.
npm install winston
این کد یک لاگر را با سه انتقال پیکربندی می کند. اولین مورد یک انتقال کنسول است که پیام های گزارش را به کنسول ارسال می کند. دومی یک انتقال فایل است که گزارش هایی را با سطح “خطا” در فایل “error.log” می نویسد. سومین انتقال فایل است که همه گزارشها را در یک فایل “combined.log” مینویسد.
const winston = require("winston");
// Winston logger
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'my-service' },
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('Hello, Winston!');
logger.warn('Warning: Something may be wrong.');
logger.error('An error occurred.');
لاگر به طور پیشفرض در سطح «اطلاعات» تنظیم شده است و شامل یک آبجکت ابرداده پیشفرض با فیلد «سرویس» است که روی «سرویس من» تنظیم شده است.
سپس کد سه پیام را با استفاده از لاگر به ترتیب در سطوح “info”، “warn” و “error” ثبت می کند. این پیام ها با توجه به پیکربندی انتقال ها به کنسول و فایل های گزارش مناسب خروجی می شوند.
مورگان
یکی از مزایای کلیدی مورگان سادگی آن است. میتوانید آن را با چند خط کد به یک برنامه Node.js اضافه کنید، زیرا برای راهاندازی آن نیازی به پیکربندی اضافی نیست.
مورگان از فرمتهای گزارشگیری متعدد، از جمله فرمتهای رایج، ترکیبی، کوتاه، کوچک و توسعهدهنده پشتیبانی میکند و به شما امکان میدهد یکی را انتخاب کنید که به بهترین وجه با نیازهای شما مطابقت دارد.
npm install morgan
این کد نحوه استفاده از مورگان را در یک برنامه Express نشان می دهد:
const express = require("express");
const morgan = require("morgan");
const app = express();
app.use(morgan("dev"));
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.listen(3000, () => console.log(`App Started`));
کد با استفاده از فرمت dev، مورگان را مقداردهی اولیه می کند. وقتی یک درخواست GET به مسیر اصلی (/) میکنید، مورگان جزئیات آن درخواست را در کنسول ثبت میکند.
با وجود سادگی، مورگان یک بسته لاگ قدرتمند است که قابلیتهای ثبت درخواست ضروری را برای برنامههای Node.js فراهم میکند.
پینو
Pino از چندین نوع حمل و نقل پشتیبانی می کند که به راحتی با حمل و نقل سفارشی گسترش می یابد. یکی از ویژگی های کلیدی Pino توانایی آن در ثبت پیام های با فرمت JSON است که تجزیه و تحلیل آنها را آسان می کند.
استفاده از Pino بسته به چارچوب Node.js متفاوت است. با اجرای دستور زیر می توانید Pino را به عنوان یک وابستگی در فهرست پروژه Express خود نصب کنید:
npm install pino-http
برای چارچوب های مختلف، مستندات Pino را بررسی کنید.
این بلوک کد استفاده Pino را در یک برنامه Express نشان می دهد:
const express = require("express");
const app = express();
const pino = require('pino-http')()
app.use(pino)
app.get("/", (req, res) => {
pino(req, res) // logs request and response
req.log.info('root route') // logs additional info
res.send("Hello World!");
});
app.listen(3000, () => console.log(`App Started`));
این کد پینو را مقداردهی اولیه می کند و آن را به عنوان میان افزار ثبت می کند. هنگامی که یک درخواست GET به مسیر اصلی (/) میکنید، Pino جزئیات درخواست شما و پاسخ آن را به کنسول ثبت میکند.
Debug
اشکال زدایی همچنین به شما امکان می دهد فضاهای نام گزارش را تنظیم کنید، که ساختار سلسله مراتبی را بر اساس مؤلفه ها و ماژول های موجود در برنامه شما به لاگ های شما ارائه می دهد و فیلتر کردن و جستجوی آنها را آسان تر می کند. علاوه بر این، Debug سطوح مختلف گزارشی مانند خطا، هشدار و اطلاعات را ارائه می دهد که می توانید از آنها برای اولویت بندی و فیلتر کردن گزارش های آنها استفاده کنید.
با این دستور می توانید Debug را به عنوان یک وابستگی در فهرست پروژه خود نصب کنید:
npm install debug
این کد استفاده Debug را در یک برنامه Express نشان می دهد:
const express = require('express');
// Import debug and create namespace
const debug = require('debug')('myapp:server');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
debug('Received request for /');
res.send('Hello, world!');
});
app.listen(port, () => {
debug(`Server listening on port ${port}`);
});
کد یک فضای نام، myapp:server ایجاد می کند. این فضای نام، گزارش های مربوط به ماژول “سرور” شما را از موارد مرتبط با ماژول های دیگر با فضای نام متفاوت در برنامه شما متمایز می کند.
برای راه اندازی دیباگ این دستور را اجرا کنید:
DEBUG=myapp:* node server.js
این دستور بالا هر پیام گزارش را با فضای نامی که با myapp: شروع می شود مطابقت می دهد. اگر فقط میخواهید گزارشهای مربوط به ماژول سرور خود را ببینید، میتوانید متغیر محیطی DEBUG را روی myapp:server تنظیم کنید.
یکی دیگر از مزیت های Debug سازگاری آن با سایر بسته های لاگ مانند Winston است.
انتخاب یک بسته ورود به سیستم
انتخاب بسته لاگ یک تصمیم مهم است که می تواند به طور قابل توجهی بر کارایی و اثربخشی فرآیند اشکال زدایی شما تأثیر بگذارد. در نظر گرفتن عواملی مانند ویژگی ها و قابلیت های بسته، سازگاری آن با زبان برنامه نویسی و محیط توسعه و سهولت استفاده و پیکربندی آن ضروری است.
در نهایت، انتخاب بسته ورود به سیستم به نیازها و الزامات خاص پروژه شما بستگی دارد.