KoaJS-এ Logging হল একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা অ্যাপ্লিকেশনের কার্যকারিতা মনিটরিং এবং ডিবাগিং এর জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি HTTP রিকোয়েস্ট, রেসপন্স, ত্রুটি, এবং অন্যান্য কার্যক্রমের লোগ রাখতে পারেন। KoaJS-এ Winston এবং Morgan ব্যবহার করে সহজেই লগিং সিস্টেম তৈরি করা যেতে পারে।
- Winston: একটি জনপ্রিয় লোগিং লাইব্রেরি, যা কাস্টম লগ স্তর, আউটপুট ফর্ম্যাট, এবং বহুবিধ ট্রান্সপোর্ট সাপোর্ট করে।
- Morgan: একটি HTTP request logger, যা HTTP রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত তথ্য লোগ করে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে KoaJS-এ Winston এবং Morgan ব্যবহার করে লগিং সিস্টেম তৈরি করা যায়।
১. Winston ইনস্টল এবং কনফিগারেশন
Winston একটি শক্তিশালী লগিং লাইব্রেরি যা লোগকে কনফিগারযোগ্য এবং স্কেলযোগ্য করে তোলে। এটি বিভিন্ন আউটপুট স্ট্রিমে লগ পাঠানোর সুযোগ দেয়, যেমন কনসোল, ফাইল, অথবা রিমোট সার্ভারে।
১.১. Winston ইনস্টল করা
npm install winston
১.২. Winston কনফিগারেশন এবং লগিং সিস্টেম তৈরি করা
const Koa = require('koa');
const Router = require('koa-router');
const winston = require('winston');
const app = new Koa();
const router = new Router();
// Winston কনফিগারেশন
const logger = winston.createLogger({
level: 'info', // লগ স্তর
format: winston.format.combine(
winston.format.colorize(), // কনসোলের জন্য রঙিন আউটপুট
winston.format.timestamp(), // টাইমস্ট্যাম্প
winston.format.simple() // সিম্পল লগ আউটপুট
),
transports: [
new winston.transports.Console(), // কনসোলে লগ
new winston.transports.File({ filename: 'app.log' }) // ফাইলে লগ সেভ
]
});
// কাস্টম লগিং মিডলওয়্যার
app.use(async (ctx, next) => {
logger.info(`Request made to: ${ctx.url}`); // HTTP রিকোয়েস্ট লগ করা
await next(); // পরবর্তী মিডলওয়্যার কল করা
});
// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
ctx.body = 'Hello, World!';
logger.info('Response sent for / endpoint'); // রেসপন্স লগ করা
});
app
.use(router.routes())
.use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে, Winston কনসোলে এবং একটি ফাইলে লগ সেভ করছে। level: 'info' সেট করা হয়েছে, যার মানে হলো সব ধরনের info, warn, এবং error লগগুলো রেকর্ড করা হবে।
লগ আউটপুট:
INFO 2024-12-23T12:00:00.000Z Request made to: /
INFO 2024-12-23T12:00:00.000Z Response sent for / endpoint
এছাড়া, আপনি log levels যেমন info, warn, error ইত্যাদি ব্যবহার করতে পারেন।
২. Morgan ইনস্টল এবং কনফিগারেশন
Morgan একটি HTTP request logger যা KoaJS-এ HTTP রিকোয়েস্টের সমস্ত ডিটেইল লগ করার জন্য ব্যবহৃত হয়। এটি প্রাথমিকভাবে HTTP রিকোয়েস্ট এবং রেসপন্সের তথ্য লোগ করে।
২.১. Morgan ইনস্টল করা
npm install morgan
২.২. Morgan কনফিগারেশন
const Koa = require('koa');
const Router = require('koa-router');
const morgan = require('morgan');
const app = new Koa();
const router = new Router();
// Morgan কনফিগারেশন
app.use(morgan('combined')); // 'combined' ফরম্যাটে HTTP রিকোয়েস্ট লগ করা
// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
ctx.body = 'Hello, World!';
});
app
.use(router.routes())
.use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে Morgan কে কনফিগার করা হয়েছে এবং এটি সমস্ত HTTP রিকোয়েস্টের জন্য 'combined' ফরম্যাটে লগ তৈরি করবে, যা অনেক ধরনের তথ্য যেমন HTTP মেথড, পাথ, রেসপন্স কোড, রিকোয়েস্ট টাইম ইত্যাদি অন্তর্ভুক্ত করে।
লগ আউটপুট:
::1 - - [23/Dec/2024:12:00:00 +0000] "GET / HTTP/1.1" 200 13 "-" "curl/7.68.0"
৩. Winston এবং Morgan একত্রে ব্যবহার করা
Winston এবং Morgan একত্রে ব্যবহার করে আপনি উন্নত লগিং সিস্টেম তৈরি করতে পারেন যেখানে Morgan HTTP রিকোয়েস্টের ডিটেইল লগ করবে এবং Winston সাধারণ লগ এবং ত্রুটি লগিংয়ের জন্য ব্যবহৃত হবে।
৩.১. Winston এবং Morgan একত্রে কনফিগারেশন
const Koa = require('koa');
const Router = require('koa-router');
const morgan = require('morgan');
const winston = require('winston');
const app = new Koa();
const router = new Router();
// Winston কনফিগারেশন
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.colorize(),
winston.format.timestamp(),
winston.format.simple()
),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'app.log' })
]
});
// Morgan কনফিগারেশন - HTTP রিকোয়েস্ট লগিং
app.use(morgan('combined', {
stream: {
write: (message) => {
logger.info(message.trim()); // Morgan লগ Winston এ পাঠানো হচ্ছে
}
}
}));
// কাস্টম লগিং মিডলওয়্যার
app.use(async (ctx, next) => {
logger.info(`Request made to: ${ctx.url}`); // HTTP রিকোয়েস্ট লগ করা
await next();
});
// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
ctx.body = 'Hello, World!';
logger.info('Response sent for / endpoint'); // রেসপন্স লগ করা
});
app
.use(router.routes())
.use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
- Morgan HTTP রিকোয়েস্টের জন্য লগ তৈরি করবে এবং তা Winston এ পাঠাবে।
- Winston কাস্টম লগ এবং ত্রুটি সেভ করবে কনসোলে এবং ফাইলে।
সারাংশ
KoaJS-এ Winston এবং Morgan ব্যবহার করে একটি শক্তিশালী লগিং সিস্টেম তৈরি করা যেতে পারে। Winston কাস্টম লগিং সিস্টেম তৈরি করতে সাহায্য করে এবং লগকে বিভিন্ন আউটপুট স্ট্রিমে (কনসোল, ফাইল) পাঠাতে পারে। Morgan HTTP রিকোয়েস্ট এবং রেসপন্সের তথ্য লোগ করে এবং তা কাস্টমাইজ করা যায়। একত্রে এই দুটি টুল ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের কার্যকারিতা এবং ত্রুটি মনিটর করতে সক্ষম হবেন।
Read more