console.log একটি local machine-এ ঠিকঠাক কাজ করে, কিন্তু একটি আসল চলমান server-এর বেশি দরকার: log level, timestamp, আর পরে সত্যিকারভাবে search করা যায় এমন output — সাধারণত প্রতিদিন হাজার হাজার লাইন জুড়ে।
| সমস্যা | একটি আসল logger যা সমাধান করে |
|---|---|
| কোনো severity level নেই | একটি error আর একটি routine info message একই দেখায় |
| Default-এ কোনো timestamp নেই | পরে কখন কিছু ঘটেছে জানা অসম্ভব |
| শুধু plain text | scale-এ search বা filter করা কঠিন — structured (JSON) log query করা যায় |
| Production-এও সবসময় print করে | একটি আসল logger development-এর বাইরে verbose log skip করতে configure করা যায় |
import winston from 'winston'
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [new winston.transports.Console()],
})
logger.info('Server started', { port: 3000 })
logger.error('Database connection failed', { error: err.message }){"level":"info","message":"Server started","port":3000,"timestamp":"2026-09-03T10:00:00.000Z"}| Level | যার জন্য ব্যবহার |
|---|---|
| error | কিছু fail হয়েছে আর মনোযোগ দরকার |
| warn | অপ্রত্যাশিত কিছু, কিন্তু app কাজ করতে থাকে |
| info | সাধারণ, উল্লেখযোগ্য event — একটি server শুরু হওয়া, একজন user sign up করা |
| debug | বিস্তারিত তথ্য, সাধারণত শুধু সক্রিয় troubleshooting-এর সময় enable করা |
(আগের Middleware পাঠ থেকে) morgan Express-নির্দিষ্ট middleware যা স্বয়ংক্রিয়ভাবে প্রতিটি আসা request log করে।
import morgan from 'morgan'
app.use(morgan('combined'))
// Log করে: method, URL, status code, response time, প্রতিটি request-এ স্বয়ংক্রিয়ভাবেএকটি log-এ কখনো যা থাকা উচিত না
একটি password, একটি পূর্ণ credit card number, বা একটি API secret কখনো log করবেন না — debug level-এও না। একটি log file প্রায়ই database নিজের চেয়ে কম সাবধানে সুরক্ষিত, আর log প্রায়ই third-party monitoring tool-এ পাঠানো হয়।