UNPKG

sipp

Version:

An Opinionated, High-Productivity MVC Web Framework in TypeScript

194 lines 6.43 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.fileTransport = exports.consoleTransport = exports.formats = exports.Logger = exports.LOG_LEVELS = void 0; const winston_1 = __importStar(require("winston")); const path_1 = require("path"); const triple_beam_1 = require("triple-beam"); const async_store_1 = require("../utils/async-store"); const { combine, timestamp, colorize, errors, printf } = winston_1.format; const STORAGE_KEY = 'logger-storage-key'; const defaultOptions = { service: 'sipp', }; var LOG_LEVELS; (function (LOG_LEVELS) { LOG_LEVELS["EMERGENCY"] = "emergency"; LOG_LEVELS["ALERT"] = "alert"; LOG_LEVELS["CRITICAL"] = "critical"; LOG_LEVELS["ERROR"] = "error"; LOG_LEVELS["WARN"] = "warning"; LOG_LEVELS["NOTICE"] = "notice"; LOG_LEVELS["INFO"] = "info"; LOG_LEVELS["DEBUG"] = "debug"; })(LOG_LEVELS = exports.LOG_LEVELS || (exports.LOG_LEVELS = {})); function toString(val) { if (typeof val === 'string') { return val; } if (val && typeof val.toString === 'function') { return JSON.stringify(val); } return 'undefined'; } class Logger { constructor(mode, logger, opt = defaultOptions) { this.mode = mode; this.logger = logger; this.opt = opt; this.logger.format = this.fmt(); } static new(mode) { const prodMode = mode === 'production'; return new Logger(mode, winston_1.default.createLogger({ level: prodMode ? LOG_LEVELS.ERROR : LOG_LEVELS.INFO, levels: winston_1.default.config.syslog.levels, transports: prodMode ? [exports.consoleTransport, exports.fileTransport] : [exports.consoleTransport], })); } addScope(scoping, force) { const store = async_store_1.getStore(); if (store) { const currentScope = store.get(STORAGE_KEY) || {}; Object.keys(scoping).forEach((key) => { if (!{}.hasOwnProperty.call(this.opt, key) || force) { currentScope[key] = scoping[key]; } }); store.set(STORAGE_KEY, currentScope); } else { this.warn('addScope called outside of async/req context'); } } emergency(msg) { this.log(LOG_LEVELS.EMERGENCY, msg); return this; } alert(msg) { this.log(LOG_LEVELS.ALERT, msg); return this; } critical(msg) { this.log(LOG_LEVELS.CRITICAL, msg); return this; } error(msg) { this.log(LOG_LEVELS.ERROR, msg); return this; } warn(msg) { this.log(LOG_LEVELS.WARN, msg); return this; } notice(msg) { this.log(LOG_LEVELS.NOTICE, msg); return this; } info(msg) { this.log(LOG_LEVELS.INFO, msg); return this; } debug(msg) { this.log(LOG_LEVELS.DEBUG, msg); return this; } setServiceLabel(label) { this.opt.service = label; } setLevel(level) { this.logger.transports.forEach((transport) => { transport.level = level; }); return this; } addTransport(transport) { this.logger.add(transport); return this; } setTransport(transport) { this.logger.clear().add(transport); return this; } log(level, message) { const store = async_store_1.hasStore() ? async_store_1.getStore() : null; return this.logger.log(Object.assign({ level, message, }, store ? store.get(STORAGE_KEY) : {})); } fmt() { if (!this.formatter) { this.formatter = this.mode === 'production' ? this.productionFormatter() : this.developmentFormatter(); } return this.formatter; } productionFormatter() { return combine(timestamp(), this.addServiceLabel(), this.createMachineParseableFormatter()); } addServiceLabel() { return { transform: (info) => { if (this.opt.service) { info.svc = this.opt.service; } return info; }, }; } developmentFormatter() { return combine(timestamp(), colorize(), this.addServiceLabel(), errors(), printf((info) => { const { level, svc, message } = info; return `${level}${svc ? ` (${svc})` : ''}: ${message}`; })); } createMachineParseableFormatter() { return { transform: (info) => { const message = Object.keys(info) .sort() .map((key) => { return `${key}="${toString(info[key])}"`; }) .filter((x) => x) .join(' '); info.message = message; info[triple_beam_1.MESSAGE] = message; return info; }, }; } } exports.Logger = Logger; exports.formats = winston_1.format; exports.consoleTransport = new winston_1.default.transports.Console({ level: process.env.NODE_ENV === 'production' ? LOG_LEVELS.ERROR : LOG_LEVELS.DEBUG, }); exports.fileTransport = new winston_1.default.transports.File({ level: process.env.NODE_ENV === 'production' ? LOG_LEVELS.ERROR : LOG_LEVELS.DEBUG, filename: path_1.join(process.cwd(), 'tmp', 'combined.log'), }); //# sourceMappingURL=index.js.map