np-express-winston-logger
Version:
A TypeScript logger for Express using Winston and Elasticsearch
47 lines • 2.18 kB
JavaScript
;
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