UNPKG

@vepler/logger

Version:

A lightweight, type-safe logging wrapper around Pino, built by Vepler for modern TypeScript applications.

142 lines 5.61 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var pino_1 = __importDefault(require("pino")); // Helper function to ensure unknown error is converted to Error object function ensureError(err) { if (err instanceof Error) { return err; } if (typeof err === 'string') { return new Error(err); } if (err && typeof err === 'object') { // Handle objects with message property if ('message' in err && typeof err.message === 'string') { var error = new Error(err.message); Object.assign(error, err); return error; } // Handle other objects return new Error(JSON.stringify(err)); } return new Error(String(err)); } // Default logger options var DEFAULT_OPTIONS = { formatters: { level: function (label) { return ({ level: label.toUpperCase() }); }, }, timestamp: pino_1.default.stdTimeFunctions.isoTime, redact: { paths: ['password', 'token', 'authorization', 'secret'], remove: true } }; var PinoWrapper = /** @class */ (function () { function PinoWrapper(logger) { this.context = {}; this.logger = logger; } PinoWrapper.initialize = function (options) { if (!PinoWrapper.instance) { var mergedOptions = __assign(__assign({}, DEFAULT_OPTIONS), options); var logger = (0, pino_1.default)(mergedOptions); PinoWrapper.instance = new PinoWrapper(logger); } }; PinoWrapper.ensureInitialized = function () { if (!PinoWrapper.instance) { PinoWrapper.initialize(); } }; // Method to add context that will be included in all subsequent logs PinoWrapper.setContext = function (context) { PinoWrapper.ensureInitialized(); PinoWrapper.instance.context = __assign(__assign({}, PinoWrapper.instance.context), context); }; // Method to clear all context PinoWrapper.clearContext = function () { PinoWrapper.ensureInitialized(); PinoWrapper.instance.context = {}; }; // Helper to merge context with additional fields PinoWrapper.mergeContext = function (additionalContext) { return __assign(__assign({}, PinoWrapper.instance.context), additionalContext); }; PinoWrapper.info = function (message, context) { PinoWrapper.ensureInitialized(); var mergedContext = PinoWrapper.mergeContext(context); PinoWrapper.instance.logger.info(mergedContext, message); }; PinoWrapper.formatError = function (error) { // Extract all enumerable properties from the error var errorProperties = Object.getOwnPropertyNames(error).reduce(function (acc, key) { if (key !== 'message' && key !== 'stack' && key !== 'name') { acc[key] = error[key]; } return acc; }, {}); return __assign({ type: error.name, message: error.message, stack: error.stack }, errorProperties); }; PinoWrapper.error = function (err, message, context) { PinoWrapper.ensureInitialized(); var error = ensureError(err); var mergedContext = PinoWrapper.mergeContext(__assign(__assign({}, context), { error: this.formatError(error) })); PinoWrapper.instance.logger.error(mergedContext, message); }; PinoWrapper.debug = function (message, context) { PinoWrapper.ensureInitialized(); var mergedContext = PinoWrapper.mergeContext(context); PinoWrapper.instance.logger.debug(mergedContext, message); }; PinoWrapper.warn = function (message, context) { PinoWrapper.ensureInitialized(); var mergedContext = PinoWrapper.mergeContext(context); PinoWrapper.instance.logger.warn(mergedContext, message); }; PinoWrapper.fatal = function (err, message, context) { PinoWrapper.ensureInitialized(); var error = ensureError(err); var mergedContext = PinoWrapper.mergeContext(__assign(__assign({}, context), { error: this.formatError(error) })); PinoWrapper.instance.logger.fatal(mergedContext, message); }; PinoWrapper.trace = function (message, context) { PinoWrapper.ensureInitialized(); var mergedContext = PinoWrapper.mergeContext(context); PinoWrapper.instance.logger.trace(mergedContext, message); }; PinoWrapper.child = function (bindings) { PinoWrapper.ensureInitialized(); var childLogger = PinoWrapper.instance.logger.child(bindings); return new PinoWrapper(childLogger); }; PinoWrapper.getRawLogger = function () { PinoWrapper.ensureInitialized(); return PinoWrapper.instance.logger; }; PinoWrapper.flush = function () { PinoWrapper.ensureInitialized(); return new Promise(function (resolve) { PinoWrapper.instance.logger.flush(function () { resolve(); }); }); }; return PinoWrapper; }()); exports.default = PinoWrapper; //# sourceMappingURL=index.js.map