Winston Logger in Node.js with Express
Logging is essential for tracking application behaviour, debugging, and monitoring. Winston logger, a versatile logging library, simplifies logging in Node.js applications. It offers features like multiple transports, log levels, and customizable formats.
Step 1: Set Up Express
First, create a basic Express app:
Initialize the project:
mkdir winston-logger-demo cd winston-logger-demo npm init -y
Install Express:
npm install express
Create an index.js file:
// index.js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, World!'); }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Start the server using:
node index.js
Step 2: Set Up Winston Logger
Winston allows you to log messages at different levels (e.g., info
, error
, debug
). It also supports multiple transports, enabling you to store logs in various formats like files, databases, or even send them to external services.
Installing Winston
First, install Winston using npm:
npm install winston
Configure Winston: Create a new file named logger.js
:
// logger.js const { createLogger, format, transports } = require('winston'); const logger = createLogger({ level: 'info', format: format.combine( format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.printf(({ timestamp, level, message }) => { return `${timestamp} [${level.toUpperCase()}]: ${message}`; }) ), transports: [ new transports.Console(), new transports.File({ filename: 'logs/app.log' }) ], }); module.exports = logger;
Step 3: Integrate Winston with Express
Use the logger in index.js
:
// index.js const express = require('express'); const logger = require('./logger'); // Import the logger const app = express(); app.use((req, res, next) => { logger.info(`Incoming request: ${req.method} ${req.url}`); next(); }); app.get('/', (req, res) => { logger.info('Handling root endpoint'); res.send('Hello, World with Winston!'); }); app.listen(3000, () => { logger.info('Server running on port 3000'); });
Conclusion:
You’ve successfully set up Winston logger in your Express project. Now, your app logs all requests and messages, making debugging and monitoring much easier!