Files
node-pkg-express-utils/out/logging.js
Sebastian Seedorf 2629d1e8e9 inital #2
2020-11-16 10:01:58 +01:00

48 lines
1.7 KiB
JavaScript

"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();
};