Newer
Older
express-blog / src / middleware / logging.js
@Jason Jason on 3 Jul 1 KB modified: .gitignore
// src/middleware/logging.js
const morgan = require("morgan");
const { winstonLogger, manualLogger } = require("../utils/logging");

const logFormat =
  ":method :url :status :response-time ms - :res[content-length]";

// function createMorgan(stream, skip) {
//   return morgan(logFormat, { stream, skip });
// }

// const morganInfo = createMorgan(
//   manualLogger.streams.info,
//   (req, res) => res.statusCode >= 400
// );

// const morganWarn = createMorgan(
//   manualLogger.streams.warn,
//   (req, res) => res.statusCode < 400 || res.statusCode >= 500
// );

// const morganError = createMorgan(
//   manualLogger.streams.error,
//   (req, res) => res.statusCode < 500
// );

// const loggingMiddleware = (req, res, next) => {
//   req.log = manualLogger;
//   next();
// };

// Define write streams for morgan using Winston's transports
const createStreamWriter = (level) => {
  return {
    write: (message) => {
      winstonLogger.log({ level, message: message.trim() });
    },
  };
};

// Morgan instances by log level
const morganInfo = morgan(logFormat, {
  stream: createStreamWriter("info"),
  skip: (req, res) => res.statusCode >= 400,
});

const morganWarn = morgan(logFormat, {
  stream: createStreamWriter("warn"),
  skip: (req, res) => res.statusCode < 400 || res.statusCode >= 500,
});

const morganError = morgan(logFormat, {
  stream: createStreamWriter("error"),
  skip: (req, res) => res.statusCode < 500,
});

// Middleware to inject logger into req
const loggingMiddleware = (req, res, next) => {
  req.log = winstonLogger;
  next();
};

module.exports = {
  loggingMiddleware,
  morganInfo,
  morganWarn,
  morganError,
};