Winston Logger in Node.js with Express

Home » Programming » Winston Logger in Node.js with Express
winston logger in Nodejs

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!