UNPKG

@lexamica-modules/logger

Version:

The various loggers and transports used for API logging in the Lexamica Eco-system

49 lines (48 loc) 2.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFormat = exports.requestFormatter = void 0; const winston_1 = __importDefault(require("winston")); // have to use any here since morgan does not make its types available function requestFormatter(tokens, req, res) { return JSON.stringify({ method: tokens.method(req, res), url: tokens.url(req, res), status_code: Number.parseFloat(tokens.status(req, res)), content_length: tokens.res(req, res, 'content-length'), response_time: Number.parseFloat(tokens['response-time'](req, res)), }); } exports.requestFormatter = requestFormatter; function logFormatTemplate(line) { const { timestamp = new Date().toISOString(), label = 'logger', ...meta } = line.metadata || line || {}; const metaEmpty = Object.keys(meta).length === 0 && meta.constructor === Object; const metaString = metaEmpty ? '' : JSON.stringify(meta, null, 2); return `${timestamp} [${label}] ${line.level}: ${line.message} ${metaString}`; } const jsonToString = winston_1.default.format((entry) => { const { message } = entry || {}; if (message instanceof Map || message instanceof Set) { entry.message = `Map/Set keys: ${[...message.keys()].join(',')}`; return entry; } else if (typeof message === 'object') { entry.message = JSON.stringify(message); return entry; } return entry; }); const colorFormat = winston_1.default.format.combine(jsonToString(), winston_1.default.format.timestamp(), winston_1.default.format.colorize(), winston_1.default.format.splat(), winston_1.default.format.simple(), winston_1.default.format.metadata(), winston_1.default.format.printf(logFormatTemplate)); const jsonFormat = winston_1.default.format.combine(jsonToString(), winston_1.default.format.timestamp(), winston_1.default.format.splat(), winston_1.default.format.simple(), winston_1.default.format.metadata(), winston_1.default.format.json()); const getFormat = (formatType) => { switch (formatType) { case 'color': return colorFormat; case 'json': default: return jsonFormat; } }; exports.getFormat = getFormat;