UNPKG

np-express-winston-logger

Version:

A TypeScript logger for Express using Winston and Elasticsearch

47 lines 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLogger = createLogger; const winston_1 = require("winston"); const context_1 = require("./context"); const http_logger_1 = require("./http-logger"); const sanitizer_1 = require("./sanitizer"); const transports_1 = require("./transports"); const log_level_1 = require("./types/log-level"); function createLogger({ serviceName, minLevel = log_level_1.LogLevel.SILLY, enableConsole = true, env = "dev", sanitize, elasticsearch, }) { const transportsList = []; if (enableConsole) { transportsList.push((0, transports_1.createConsoleTransport)(minLevel)); } if (elasticsearch) { transportsList.push((0, transports_1.createElasticsearchTransport)({ minLevel, url: elasticsearch.url, serviceName, })); } const formatOptions = winston_1.format.combine((0, winston_1.format)((log) => { if (log.env === "prod" && [log_level_1.LogLevel.DEBUG, log_level_1.LogLevel.VERBOSE].includes(log.level)) { return false; } const splat = log[Symbol.for("splat")]; if (sanitize) { const extraFields = sanitize.sensitiveFields; if (log.meta) log.meta = (0, sanitizer_1.sanitizeData)(log.meta, extraFields); if (splat?.length) { log[Symbol.for("splat")] = splat.map((item) => typeof item === "object" ? (0, sanitizer_1.sanitizeData)(item, extraFields) : item); } } return log; })(), (0, winston_1.format)((log) => (true ? (0, context_1.injectRequestId)(log) : log))(), winston_1.format.timestamp({ format: () => new Date().toISOString() }), winston_1.format.errors({ stack: true }), winston_1.format.splat(), winston_1.format.json()); const logger = (0, winston_1.createLogger)({ level: minLevel, defaultMeta: { service: serviceName, env }, transports: transportsList, format: formatOptions, }); const httpLogger = (0, http_logger_1.createHttpLogger)(logger); return { logger, httpLogger }; } //# sourceMappingURL=logger.js.map