express winston

const express = require('express');
const winston = require('winston');

const app = express();

// Step 1: Create a Winston logger instance
const logger = winston.createLogger({
  level: 'info', // Set the logging level to 'info'
  format: winston.format.json(), // Use JSON format for log entries
  transports: [
    new winston.transports.Console(), // Log to the console
    new winston.transports.File({ filename: 'error.log', level: 'error' }) // Log errors to a file
  ]
});

// Step 2: Middleware to log HTTP requests
app.use((req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
});

// Step 3: Define a route
app.get('/', (req, res) => {
  res.send('Hello, Express!');
});

// Step 4: Error handling middleware
app.use((err, req, res, next) => {
  logger.error(err.message, err); // Log the error message and stack trace
  res.status(500).send('Internal Server Error');
});

// Step 5: Start the Express server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});