Logging System (Winston / Morgan)
Logging System in Express.js (Winston & Morgan)
Production-ready Express.js অ্যাপ্লিকেশনের জন্য Logging অত্যন্ত গুরুত্বপূর্ণ। Winston এবং Morgan ব্যবহার করে কীভাবে শক্তিশালী Logging System তৈরি করা যায় তা এখানে বিস্তারিতভাবে আলোচনা করা হয়েছে।
📌 Logging কেন প্রয়োজন?
- Error এবং Bug দ্রুত শনাক্ত করা
- User request এবং response ট্র্যাক করা
- Server performance মনিটর করা
- Production environment-এ Debugging সহজ করা
🧩 Morgan কী?
Morgan হলো Express.js এর জন্য একটি HTTP request logger middleware। এটি প্রতিটি incoming request-এর method, URL, status code, response time ইত্যাদি লগ করে।
🔧 Morgan Install & Setup
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev'));
🏗️ Winston কী?
Winston হলো একটি powerful এবং flexible logging library। এটি বিভিন্ন level (info, warn, error) অনুযায়ী log তৈরি করতে পারে এবং file, console বা external service-এ log সংরক্ষণ করতে পারে।
npm install winston
⚙️ Winston Basic Configuration
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
],
});
module.exports = logger;
🖥️ Console Logging (Development)
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple(),
}));
}
🧪 Logger ব্যবহার করার উদাহরণ
const logger = require('./logger');
app.get('/', (req, res) => {
logger.info('Home route accessed');
res.send('Hello World');
});
app.get('/error', (req, res) => {
logger.error('Something went wrong!');
res.status(500).send('Error occurred');
});
🔗 Morgan + Winston একসাথে ব্যবহার
Production অ্যাপে সাধারণত Morgan দিয়ে HTTP request capture করে Winston দিয়ে file-এ সংরক্ষণ করা হয়।
app.use(morgan('combined', {
stream: {
write: (message) => logger.info(message.trim())
}
}));
✅ Best Practices
- Production-এ console.log ব্যবহার করবেন না
- Different log level ব্যবহার করুন (info, warn, error)
- Log rotation (daily log files) ব্যবহার করুন
- Sensitive data (password, token) কখনো log করবেন না