✅ Step 1 — Configure Sequelize Logging Properly

When initializing Sequelize, add:

import { Sequelize } from "sequelize";
import logger from "../utils/logger.js";

const sequelize = new Sequelize({
  dialect: "postgres",
  host: process.env.DB_HOST,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  port: Number(process.env.DB_PORT),
  logging: (msg) => logger.debug(msg),  // ✅ Log queries using standardized logger
  benchmark: true, // ✅ Shows execution time
});

🧠 What benchmark: true Does?

It prints execution time for every query, example:

Executed (default): SELECT * FROM users; Elapsed time: 34ms

This is extremely important in performance monitoring.


✅ Step 2 — Use a Real Logger (Not console.log)

We’ll use Winston (production standard):

npm install winston

utils/logger.js

import winston from "winston";

const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || "info",
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json() // ✅ structured logs
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: "logs/app.log" }),
  ],
});

export default logger;

Why structured JSON logs?

Because in production monitoring tools (Datadog, Grafana Loki, ELK Stack):


✅ Step 3 — Log Requests & Responses (API Monitoring)

Install request logger:

npm install morgan