KoaJS এর Error Handling এবং Logging

কোআজেএস (KoaJS) - Web Development

221

KoaJS একটি শক্তিশালী এবং নমনীয় ওয়েব ফ্রেমওয়ার্ক, যেখানে Error Handling এবং Logging খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে। এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS-এ ত্রুটি হ্যান্ডলিং এবং লগিং করা যায়, যাতে অ্যাপ্লিকেশনের সমস্যা সনাক্ত করা এবং সমাধান করা সহজ হয়।


KoaJS Error Handling

KoaJS-এর Error Handling মূলত try-catch ব্লক এবং মিডলওয়্যার ব্যবহারের মাধ্যমে করা হয়। KoaJS-এ, আপনি সাধারণত একটি কেন্দ্রীয় ত্রুটি হ্যান্ডলিং মিডলওয়্যার ব্যবহার করতে পারেন যা সমস্ত ত্রুটি ক্যাচ করবে এবং রেসপন্স হিসেবে তা ক্লায়েন্টে পাঠাবে।

১. কেন্দ্রীয় Error Handling Middleware তৈরি করা

KoaJS-এ একটি সাধারণ Error Handling মিডলওয়্যার তৈরি করা যেতে পারে যা try-catch ব্লক ব্যবহার করে:

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

// কেন্দ্রীয় ত্রুটি হ্যান্ডলিং মিডলওয়্যার
app.use(async (ctx, next) => {
  try {
    await next(); // পরবর্তী মিডলওয়্যার কল করা
  } catch (err) {
    ctx.status = err.status || 500; // ত্রুটির স্ট্যাটাস কোড
    ctx.body = { message: err.message }; // ত্রুটির বার্তা
    ctx.app.emit('error', err, ctx); // লগিং এবং অন্যান্য কাজ
  }
});

// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
  throw new Error('Something went wrong!');  // উদাহরণস্বরূপ ত্রুটি
  ctx.body = 'Hello, world!';
});

app
  .use(router.routes())
  .use(router.allowedMethods());

// Error Log ইভেন্ট
app.on('error', (err, ctx) => {
  console.error('Server Error:', err);
});

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে, Error Handling Middleware একটি সাধারণ try-catch ব্লক ব্যবহার করেছে। যদি কোনো ত্রুটি ঘটে, তাহলে তা ctx.status এবং ctx.body মাধ্যমে রেসপন্স হিসেবে পাঠানো হয় এবং app.emit('error', err, ctx) ইভেন্টের মাধ্যমে ত্রুটি লগ করা হয়।


KoaJS Logging

KoaJS-এ লগিংয়ের জন্য আপনি সাধারণত koa-logger বা অন্য কোনো লগিং লাইব্রেরি ব্যবহার করতে পারেন। এখানে আমরা koa-logger মিডলওয়্যার ব্যবহার করে কীভাবে রিকোয়েস্ট লগিং করা যায় তা দেখব।

২. koa-logger ইনস্টল করা

প্রথমে koa-logger ইনস্টল করতে হবে:

npm install koa-logger

৩. koa-logger ব্যবহার করা

এখন, আপনি koa-logger ব্যবহার করে রিকোয়েস্টের লোগ তৈরি করতে পারেন:

const Koa = require('koa');
const Router = require('koa-router');
const logger = require('koa-logger');
const app = new Koa();
const router = new Router();

// koa-logger মিডলওয়্যার ব্যবহার করা
app.use(logger());

// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
  ctx.body = 'Hello, world!';
});

app
  .use(router.routes())
  .use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে, koa-logger ব্যবহার করে প্রতিটি HTTP রিকোয়েস্টের জন্য লগ তৈরি করা হচ্ছে, যা রিকোয়েস্টের মেথড, পাথ, রেসপন্স টাইম ইত্যাদি দেখাবে।

লগ আউটপুট উদাহরণ:

GET / 200 6ms

এই লগ আউটপুটে:

  • GET: HTTP মেথড
  • /: রিকোয়েস্ট পাথ
  • 200: HTTP স্ট্যাটাস কোড
  • 6ms: রেসপন্স টাইম

কাস্টম লগিং

আপনি যদি কাস্টম লগিং করতে চান, যেমন ফাইল বা ডাটাবেসে লগ সেভ করতে চান, তবে winston বা pino লাইব্রেরি ব্যবহার করতে পারেন। এখানে 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({
  transports: [
    new winston.transports.Console({ format: winston.format.simple() }),
    new winston.transports.File({ filename: 'app.log' })
  ]
});

// কাস্টম লগিং মিডলওয়্যার
app.use(async (ctx, next) => {
  logger.info(`${ctx.method} ${ctx.url}`);  // রিকোয়েস্ট লগ করা
  await next();  // পরবর্তী মিডলওয়্যার কল করা
});

// একটি রাউট তৈরি করা
router.get('/', (ctx) => {
  ctx.body = 'Hello, world!';
});

app
  .use(router.routes())
  .use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে, winston ব্যবহার করে আমরা কাস্টম লগ সিস্টেম তৈরি করেছি। রিকোয়েস্টের মেথড এবং পাথ লগ করা হচ্ছে এবং লগ কনসোল এবং app.log ফাইলে সেভ হচ্ছে।


Error এবং Logging এর সারাংশ

KoaJS-এ Error Handling এবং Logging অত্যন্ত গুরুত্বপূর্ণ। আমরা try-catch ব্লক এবং একটি কেন্দ্রীয় Error Handling মিডলওয়্যার ব্যবহার করেছি, যা সকল ত্রুটি ধরবে এবং সেগুলোকে ক্লায়েন্টে পাঠাবে। তাছাড়া, koa-logger এবং winston এর মাধ্যমে লগিং ব্যবস্থা যোগ করা হয়েছে, যা রিকোয়েস্ট এবং ত্রুটির লগ সংগ্রহ করতে সহায়তা করে। এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের কার্যকারিতা মনিটর করতে পারবেন এবং সমস্যা সমাধান করতে সক্ষম হবেন।

Content added By

KoaJS একটি মিনিমালিস্ট ফ্রেমওয়ার্ক, যা উন্নত Error Handling ক্ষমতা প্রদান করে। KoaJS-এ error handling সাধারণত middleware এর মাধ্যমে করা হয়। KoaJS-এর মিডলওয়্যার সিস্টেমটি অ্যাসিনক্রোনাস (asynchronous) এবং Promise ভিত্তিক, যার মাধ্যমে আপনি সহজে ত্রুটি সনাক্ত ও পরিচালনা করতে পারেন।

এই টিউটোরিয়ালে, আমরা কিভাবে একটি Error Handling Middleware তৈরি করা যায়, তা দেখব যা সমস্ত রিকোয়েস্টের জন্য ত্রুটিগুলি সনাক্ত করে এবং ক্লায়েন্টে উপযুক্ত রেসপন্স পাঠায়।


KoaJS-এ Error Handling Middleware তৈরি করা

১. কেন্দ্রীয় Error Handling Middleware

KoaJS-এ একটি সাধারণ Error Handling Middleware তৈরি করার জন্য, আপনি try-catch ব্লক এবং next() এর মাধ্যমে পরবর্তী মিডলওয়্যার কল করতে পারেন। যদি কোনো ত্রুটি ঘটে, তবে আপনি তা ক্যাচ করতে পারবেন এবং রেসপন্স হিসেবে ক্লায়েন্টে পাঠাতে পারবেন।

উদাহরণ:

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

// কেন্দ্রীয় Error Handling Middleware
app.use(async (ctx, next) => {
  try {
    await next();  // পরবর্তী মিডলওয়্যার কল করা
  } catch (err) {
    // ত্রুটি হ্যান্ডলিং
    ctx.status = err.status || 500;  // স্ট্যাটাস কোড সেট করা
    ctx.body = { message: err.message };  // ত্রুটির বার্তা পাঠানো
    ctx.app.emit('error', err, ctx);  // ত্রুটি লগ করা
  }
});

// একটি রাউট তৈরি করা যা জোর করে ত্রুটি সৃষ্টি করবে
router.get('/error', (ctx) => {
  throw new Error('Something went wrong!');  // জোর করে ত্রুটি সৃষ্টি
  ctx.body = 'This will never be reached';
});

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

// Error Log ইভেন্ট
app.on('error', (err, ctx) => {
  console.error('Server Error:', err);  // ত্রুটি লগ
});

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে:

  1. Error Handling Middleware: try-catch ব্লক ব্যবহার করে সমস্ত ত্রুটি ক্যাচ করা হচ্ছে এবং ctx.status এবং ctx.body এর মাধ্যমে ক্লায়েন্টে রেসপন্স পাঠানো হচ্ছে।
  2. ctx.app.emit('error', err, ctx): ত্রুটির লগ ইন করার জন্য KoaJS emit ইভেন্ট ব্যবহার করছে, যা লগ ফাইল বা অন্য জায়গায় ত্রুটি রেকর্ড করতে সহায়তা করবে।
  3. /error রাউট: এখানে আমরা একটি জোর করে ত্রুটি তৈরি করছি যা 500 (Internal Server Error) রেসপন্স পাঠাবে।

২. Custom Error Handling Classes

কখনও কখনও, আপনি যদি কাস্টম ত্রুটি তৈরি করতে চান, তবে আপনি Custom Error Classes ব্যবহার করতে পারেন, যাতে আপনি বিভিন্ন ধরনের ত্রুটি কাস্টমাইজ করতে পারেন এবং তাদের আলাদা স্ট্যাটাস কোড ও বার্তা পাঠাতে পারেন।

class NotFoundError extends Error {
  constructor(message) {
    super(message);
    this.name = 'NotFoundError';
    this.status = 404;  // HTTP স্ট্যাটাস কোড
  }
}

class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = 'ValidationError';
    this.status = 400;  // HTTP স্ট্যাটাস কোড
  }
}

app.use(async (ctx, next) => {
  try {
    await next();
    if (!ctx.body) {
      throw new NotFoundError('Resource not found');  // কাস্টম ত্রুটি
    }
  } catch (err) {
    ctx.status = err.status || 500;
    ctx.body = { message: err.message };
    ctx.app.emit('error', err, ctx);
  }
});

router.get('/validate', (ctx) => {
  throw new ValidationError('Invalid input data');  // কাস্টম ভ্যালিডেশন ত্রুটি
});

app.on('error', (err, ctx) => {
  console.error(`${err.name}: ${err.message}`);
});

এখানে:

  • Custom Error Classes: NotFoundError এবং ValidationError কাস্টম ত্রুটি ক্লাস তৈরি করা হয়েছে, যেখানে আপনি স্ট্যাটাস কোড এবং ত্রুটি বার্তা কাস্টমাইজ করতে পারেন।
  • /validate রাউটটিতে আমরা একটি কাস্টম ValidationError তৈরি করছি।

৩. Async/Await সহ Error Handling

KoaJS-এ async/await ব্যবহৃত হলে, try-catch ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং আরও সহজ হয়ে যায়। নিচে একটি অ্যাসিনক্রোনাস রাউটের উদাহরণ দেওয়া হল যেখানে async ফাংশন ব্যবহৃত হয়েছে:

router.get('/async', async (ctx) => {
  try {
    const result = await someAsyncOperation();
    ctx.body = result;
  } catch (err) {
    throw new Error('Async operation failed');  // অ্যাসিনক্রোনাস ত্রুটি
  }
});

এখানে, যদি someAsyncOperation() ফাংশনে কোনো ত্রুটি ঘটে, তাহলে সেই ত্রুটিটি catch ব্লকে ধরা হবে এবং Error Handling Middleware এর মাধ্যমে রেসপন্স পাঠানো হবে।


৪. Logging ত্রুটি

এছাড়া, আপনি ত্রুটি লগ করতে winston বা অন্য কোনো লগিং লাইব্রেরি ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে winston ব্যবহার করে ত্রুটির লগ করা হচ্ছে:

৪.১. Winston লগিং ইনস্টল করা

npm install winston

৪.২. Winston ব্যবহার করে ত্রুটি লগিং

const winston = require('winston');

// winston কনফিগারেশন
const logger = winston.createLogger({
  transports: [
    new winston.transports.Console({ format: winston.format.simple() }),
    new winston.transports.File({ filename: 'error.log' })
  ]
});

app.on('error', (err, ctx) => {
  logger.error(`${err.name}: ${err.message}`);  // ত্রুটি লগ
});

এখানে, আমরা winston ব্যবহার করে ত্রুটির লগ কনসোলে এবং error.log ফাইলে সেভ করছি।


সারাংশ

KoaJS-এ Error Handling Middleware তৈরি করা অত্যন্ত সহজ। আপনি try-catch ব্লক ব্যবহার করে অ্যাসিনক্রোনাস ত্রুটির সঠিকভাবে হ্যান্ডলিং করতে পারেন এবং কাস্টম ত্রুটি ক্লাস তৈরি করে আরো নির্দিষ্ট ত্রুটির জন্য স্ট্যাটাস কোড এবং বার্তা কাস্টমাইজ করতে পারেন। Logging ব্যবস্থা যোগ করে, আপনি আপনার অ্যাপ্লিকেশনের ত্রুটি মনিটর করতে পারেন এবং সমস্যা সমাধানে সহায়তা করতে পারবেন। KoaJS-এ Error Handling ব্যবস্থাটি অত্যন্ত নমনীয় এবং শক্তিশালী।

Content added By

KoaJS একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা Node.js-এ অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। ত্রুটি পরিচালনা (Error Handling) একটি গুরুত্বপূর্ণ দিক, এবং KoaJS এ কাস্টম ত্রুটি পেজ এবং ত্রুটি রেসপন্স তৈরি করা খুবই সহজ। KoaJS-এ আপনি মিডলওয়্যার ব্যবহার করে ত্রুটি হ্যান্ডলিং এবং কাস্টম ত্রুটি পেজ তৈরি করতে পারেন।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS-এ কাস্টম ত্রুটি পেজ এবং কাস্টম ত্রুটি রেসপন্স তৈরি করা যায়।


১. KoaJS ত্রুটি হ্যান্ডলিং মিডলওয়্যার তৈরি করা

KoaJS-এ Error Handling সাধারণত try-catch ব্লক এবং মিডলওয়্যার ব্যবহার করে করা হয়। আমরা একটি কাস্টম Error Handling মিডলওয়্যার তৈরি করব যা সমস্ত ত্রুটি ক্যাচ করবে এবং রেসপন্স হিসেবে তা কাস্টম পেজ বা JSON রেসপন্স পাঠাবে।

১.১. কাস্টম Error Handling মিডলওয়্যার

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

// কাস্টম ত্রুটি হ্যান্ডলিং মিডলওয়্যার
app.use(async (ctx, next) => {
  try {
    await next(); // পরবর্তী মিডলওয়্যার কল করা
  } catch (err) {
    // ত্রুটি হ্যান্ডলিং
    ctx.status = err.status || 500; // যদি ত্রুটি না থাকে তবে 500 (Internal Server Error)
    ctx.body = { message: err.message }; // ত্রুটির বার্তা
    ctx.app.emit('error', err, ctx); // লগিং এবং অন্যান্য কাজ
  }
});

// একটি রাউট তৈরি করা যা ত্রুটি ঘটাবে
router.get('/error', async (ctx) => {
  throw new Error('Something went wrong!'); // এখানে কৃত্রিমভাবে ত্রুটি তৈরি করা হয়েছে
});

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

// Error লগ ইভেন্ট
app.on('error', (err, ctx) => {
  console.error('Server Error:', err);
});

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে:

  • আমরা একটি কাস্টম Error Handling Middleware তৈরি করেছি যা সমস্ত ত্রুটি ধরবে।
  • যদি কোনো ত্রুটি ঘটে, তাহলে ctx.status এবং ctx.body এর মাধ্যমে ত্রুটি রেসপন্স পাঠানো হবে।

২. Custom Error Pages তৈরি করা

KoaJS-এ কাস্টম ত্রুটি পেজ তৈরি করার জন্য, আপনি কাস্টম HTML পেজ তৈরি করতে পারেন এবং ত্রুটির জন্য সেই পেজ প্রদর্শন করতে পারেন। উদাহরণস্বরূপ, যখন একটি 404 বা 500 ত্রুটি ঘটে, তখন একটি কাস্টম HTML পেজ রেন্ডার করা হবে।

২.১. 404 Error Page তৈরি করা

const fs = require('fs');
const path = require('path');

// কাস্টম 404 পেজ তৈরি করা
router.get('*', async (ctx) => {
  ctx.status = 404;
  ctx.type = 'html';
  ctx.body = fs.createReadStream(path.join(__dirname, '404.html')); // 404.html ফাইলটি ব্যবহার করা হবে
});

এখানে, সমস্ত রাউটের জন্য * ওয়াইল্ডকার্ড ব্যবহার করা হয়েছে যা 404 এর জন্য কাস্টম পেজ রেন্ডার করবে।

404.html (এটি আপনার প্রকল্পের মূল ফোল্ডারে থাকতে হবে):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>404 - Page Not Found</title>
</head>
<body>
  <h1>Oops! Page Not Found</h1>
  <p>The page you are looking for might have been removed or temporarily unavailable.</p>
</body>
</html>

এখানে, 404 ত্রুটি ঘটলে একটি কাস্টম HTML পেজ রেন্ডার করা হবে যা ব্যবহারকারীকে উপযুক্ত ত্রুটির বার্তা দেখাবে।

২.২. 500 Error Page তৈরি করা

500 ত্রুটি (Server Error) হ্যান্ডল করার জন্য আমরা কাস্টম 500 পেজও তৈরি করতে পারি:

router.get('*', async (ctx) => {
  ctx.status = 500;
  ctx.type = 'html';
  ctx.body = fs.createReadStream(path.join(__dirname, '500.html')); // 500.html ফাইলটি ব্যবহার করা হবে
});

500.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>500 - Internal Server Error</title>
</head>
<body>
  <h1>Something went wrong!</h1>
  <p>We are currently experiencing technical difficulties. Please try again later.</p>
</body>
</html>

এখানে, 500 ত্রুটি ঘটলে একটি কাস্টম HTML পেজ রেন্ডার করা হবে, যা ব্যবহারকারীকে সার্ভার ত্রুটির বিষয়ে জানাবে।


৩. Error Responses in JSON Format

কাস্টম ত্রুটি রেসপন্স JSON ফরম্যাটে প্রদান করতে চাইলে আপনি এইভাবে কোড পরিবর্তন করতে পারেন:

app.use(async (ctx, next) => {
  try {
    await next();
  } catch (err) {
    ctx.status = err.status || 500;
    ctx.body = {
      error: {
        message: err.message,
        code: ctx.status
      }
    };
    ctx.app.emit('error', err, ctx);
  }
});

এখানে, যদি কোনো ত্রুটি ঘটে, তাহলে JSON রেসপন্স পাঠানো হবে, যার মধ্যে message এবং code থাকবে।


৪. Custom Error Handling for Specific Routes

আপনি যদি কিছু নির্দিষ্ট রাউটে কাস্টম ত্রুটি হ্যান্ডলিং করতে চান, তবে আপনি সেগুলির জন্য আলাদা মিডলওয়্যার ব্যবহার করতে পারেন।

৪.১. Specific Route Error Handling

router.get('/admin', async (ctx, next) => {
  // কিছু কাজ যা ত্রুটি সৃষ্টি করতে পারে
  if (!ctx.state.user || ctx.state.user.role !== 'admin') {
    const err = new Error('Unauthorized Access');
    err.status = 403;
    throw err; // ত্রুটি ছুঁড়তে হবে
  }
  ctx.body = 'Admin dashboard';
});

এখানে, /admin রাউটের জন্য একটি কাস্টম ত্রুটি ছুড়েছি, যদি ব্যবহারকারী admin রোলের না হয়, তাহলে 403 Forbidden ত্রুটি পাঠানো হবে।


সারাংশ

KoaJS-এ কাস্টম Error Handling, Error Pages, এবং Error Responses তৈরি করা সহজ। আপনি কাস্টম ত্রুটি পেজ এবং JSON রেসপন্স তৈরি করতে পারেন, যা ব্যবহারকারীদের উপযুক্ত বার্তা প্রদান করবে। KoaJS এর Error Handling Middleware এবং Custom Error Pages ব্যবহার করে আপনি অ্যাপ্লিকেশনের ত্রুটি দ্রুত চিহ্নিত এবং সঠিকভাবে পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশনের রিলায়েবিলিটি এবং ইউজার এক্সপেরিয়েন্স উন্নত করতে সাহায্য করে।

Content added By

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 রিকোয়েস্ট এবং রেসপন্সের তথ্য লোগ করে এবং তা কাস্টমাইজ করা যায়। একত্রে এই দুটি টুল ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের কার্যকারিতা এবং ত্রুটি মনিটর করতে সক্ষম হবেন।

Content added By

KoaJS একটি লঘু এবং কাস্টমাইজযোগ্য ওয়েব ফ্রেমওয়ার্ক, যা Node.js প্ল্যাটফর্মে তৈরি। যখন আপনি একটি অ্যাপ্লিকেশন ডেভেলপ করছেন, তখন Error Logging এবং Monitoring অত্যন্ত গুরুত্বপূর্ণ। এটি ত্রুটি ট্র্যাক করতে, সিস্টেমের পারফরম্যান্স মেট্রিক্স পেতে এবং প্রোডাকশন পরিবেশে ত্রুটি দ্রুত চিহ্নিত করতে সহায়ক।

KoaJS-এ Error Logging এবং Monitoring এর জন্য অনেক জনপ্রিয় প্যাকেজ এবং পদ্ধতি রয়েছে, যা ত্রুটির ডিবাগিং এবং অ্যাপ্লিকেশনের পারফরম্যান্স ট্র্যাক করতে সহায়তা করে।


১. Error Logging (ত্রুটি লগিং)

KoaJS-এ ত্রুটি লগিং করতে বিভিন্ন টুলস এবং মিডলওয়্যার ব্যবহার করা যায়, যেমন koa-logger, winston, অথবা bunyan। এগুলোর মাধ্যমে আপনি অ্যাপ্লিকেশনের ত্রুটি এবং অন্যান্য গুরুত্বপূর্ণ তথ্য লগ করতে পারবেন।

১.১. koa-logger ব্যবহার করে লগিং

KoaJS-এ খুব সহজে লগিং করার জন্য আপনি koa-logger ব্যবহার করতে পারেন। এটি রিকোয়েস্ট এবং রেসপন্সের তথ্য লগ করে, যা ডেভেলপমেন্টের সময় সহায়ক।

১.১.১. koa-logger ইনস্টল করা
npm install koa-logger
১.১.২. koa-logger ব্যবহার করা
const Koa = require('koa');
const Router = require('koa-router');
const logger = require('koa-logger');
const app = new Koa();
const router = new Router();

// koa-logger মিডলওয়্যার ব্যবহার করা
app.use(logger());

// সাধারণ রাউট হ্যান্ডলার
router.get('/', (ctx) => {
  ctx.body = 'Hello, KoaJS with logging!';
});

app.use(router.routes()).use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে koa-logger মিডলওয়্যারটি ব্যবহৃত হয়েছে, যা প্রতি রিকোয়েস্টের লগ তৈরি করবে। এই লগে রিকোয়েস্টের পাথ, HTTP মেথড, স্ট্যাটাস কোড এবং রেসপন্স টাইম অন্তর্ভুক্ত থাকবে।


১.২. Winston বা Bunyan দিয়ে ডিটেইলড লগিং

আপনি যদি আরও ডিটেইলড লগিং চান, যেখানে ত্রুটির স্তর, সময়, মেসেজ এবং স্ট্যাক ট্রেসের মত আরও তথ্য লিপিবদ্ধ করা যায়, তবে winston অথবা bunyan ব্যবহার করা যেতে পারে।

১.২.১. 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.simple(),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'app.log' })
  ]
});

// লগিং করতে winston ব্যবহার করা
app.use(async (ctx, next) => {
  try {
    await next();
  } catch (err) {
    logger.error(err.message); // ত্রুটি লগ করা
    ctx.status = 500;
    ctx.body = 'Internal Server Error';
  }
});

// রাউট হ্যান্ডলিং
router.get('/', (ctx) => {
  ctx.body = 'Hello, KoaJS with Winston Logging!';
});

app.use(router.routes()).use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে:

  • winston ব্যবহার করা হয়েছে এবং ডেটা কনসোল এবং একটি ফাইল (app.log) এ লগ করা হয়েছে।
  • ত্রুটি থাকলে logger.error() ব্যবহার করে ত্রুটির মেসেজ লগ করা হচ্ছে।

২. Error Monitoring (ত্রুটি মনিটরিং)

KoaJS অ্যাপ্লিকেশনের ত্রুটি মনিটরিং করার জন্য আপনি কিছু শক্তিশালী টুল ব্যবহার করতে পারেন, যেমন Sentry, New Relic, অথবা Datadog। এই টুলগুলো রিয়েল-টাইম ত্রুটি ট্র্যাকিং এবং পারফরম্যান্স মনিটরিংয়ের জন্য ব্যবহৃত হয়।

২.১. Sentry এর সাথে ত্রুটি মনিটরিং

Sentry একটি জনপ্রিয় ত্রুটি মনিটরিং টুল যা আপনার অ্যাপ্লিকেশন থেকে ত্রুটি ট্র্যাক করে এবং তা রিয়েল-টাইমে আপনাকে জানায়।

২.১.১. Sentry ইনস্টল করা
npm install @sentry/node
২.১.২. Sentry কনফিগারেশন এবং ব্যবহারের উদাহরণ
const Koa = require('koa');
const Router = require('koa-router');
const Sentry = require('@sentry/node');
const app = new Koa();
const router = new Router();

// Sentry কনফিগারেশন করা
Sentry.init({ dsn: 'your_sentry_dsn_here' });

// Sentry মিডলওয়্যার যুক্ত করা
app.use(Sentry.Handlers.requestHandler());

// রাউট হ্যান্ডলার
router.get('/', (ctx) => {
  throw new Error('This is a test error');
});

// Sentry Error Handler যুক্ত করা
app.use(Sentry.Handlers.errorHandler());

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে:

  • Sentry.Handlers.requestHandler() এবং Sentry.Handlers.errorHandler() ব্যবহার করে Sentry এর মাধ্যমে ত্রুটিগুলি মনিটর করা হচ্ছে।
  • একটি কৃত্রিম ত্রুটি তৈরি করে, যাতে Sentry ড্যাশবোর্ডে ত্রুটি ট্র্যাক করা যায়।

৩. Performance Monitoring (পারফরম্যান্স মনিটরিং)

New Relic এবং Datadog হলো জনপ্রিয় পারফরম্যান্স মনিটরিং টুলস যা KoaJS অ্যাপ্লিকেশনটির পারফরম্যান্স ট্র্যাক করতে সাহায্য করে। এগুলো API কলের সময়, সার্ভার লোড এবং অন্যান্য গুরুত্বপূর্ণ পরিমাপ ট্র্যাক করে।

৩.১. New Relic Integration

New Relic এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং ত্রুটিগুলি মনিটর করতে পারেন। New Relic Node.js এজেন্ট ইনস্টল করতে হবে।

৩.১.১. New Relic ইনস্টল করা
npm install newrelic
৩.১.২. New Relic কনফিগারেশন

New Relic কনফিগারেশনের জন্য আপনাকে একটি newrelic.js কনফিগারেশন ফাইল তৈরি করতে হবে এবং এটি আপনার অ্যাপ্লিকেশনের শুরুতে লোড করতে হবে।


সারাংশ

KoaJS-এ Error Logging এবং Monitoring অত্যন্ত গুরুত্বপূর্ণ। আপনি koa-logger, winston, বা bunyan ব্যবহার করে ত্রুটি এবং অন্যান্য গুরুত্বপূর্ণ তথ্য লগ করতে পারেন। পাশাপাশি, Sentry, New Relic বা Datadog এর মতো টুল ব্যবহার করে আপনি রিয়েল-টাইম ত্রুটি মনিটরিং এবং পারফরম্যান্স ট্র্যাকিং করতে পারবেন। এই টুলসগুলো আপনার অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় ত্রুটি ট্র্যাকিং এবং পারফরম্যান্স মনিটরিংয়ের জন্য অত্যন্ত সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...