"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpLogger = exports.Logger = void 0; const winston = require("winston"); const colors = require("colors"); const _1 = require("."); const prune = require("json-prune"); const logger = winston.createLogger({ level: _1.DefaultConfig.isProduction ? "info" : "silly", format: winston.format.json(), transports: [ new winston.transports.Console({ format: winston.format.simple(), }), ], }); const levels = ["error", "warn", "info", "http", "verbose", "debug", "silly"]; const wrapper = (original) => { return (...args) => { return original(args.map((obj) => typeof obj === "string" ? obj : prune(obj)).join(" ")); }; }; exports.Logger = {}; for (const level of levels) { exports.Logger[level] = wrapper(logger[level]); } exports.Logger.log = wrapper(logger["silly"]); exports.HttpLogger = (req, res, next) => { const start = Date.now(); const path = req.path; const end = res.end; res.end = function (...args) { const statusCode = res.statusCode; const colorFunction = statusCode >= 500 ? colors.red : statusCode >= 400 ? colors.yellow : statusCode >= 300 ? colors.cyan : statusCode >= 200 ? colors.green : colors.gray; const status = colorFunction(res.statusCode.toString(10)); const method = req.method.toUpperCase().padEnd(6, " "); const responseTime = (Date.now() - start).toString(10).padStart(3, " "); if (!req.noLogging) exports.Logger.http(`${status} ${method} ${responseTime}ms ${path}`); end.apply(res, args); }; next(); };