48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
"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.noLogging)
|
|
exports.Logger.http(`${status} ${method} ${responseTime}ms ${path}`);
|
|
end.apply(res, args);
|
|
};
|
|
next();
|
|
};
|