"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpLogger = exports.Logger = exports.levels = 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(), }), ], }); exports.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 exports.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.noHttpLogging) exports.Logger.http(`${status} ${method} ${responseTime}ms ${path}`); end.apply(res, args); }; next(); };