@vepler/logger
Version:
A lightweight, type-safe logging wrapper around Pino, built by Vepler for modern TypeScript applications.
142 lines • 5.61 kB
JavaScript
;
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