structlog
Version:
Structured logging tool for Node.js.
99 lines • 10.5 kB
JavaScript
"use strict";
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _StructuredLogger_instances, _StructuredLogger_log, _StructuredLogger_getCurrentTimestampInDesiredFormat, _StructuredLogger_enrichTags;
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = exports.StructuredLogger = void 0;
const uuid_1 = require("./utils/uuid");
const caller_1 = require("./lib/caller");
const types_1 = require("./types/types");
const utils_1 = require("./utils/utils");
const worker_threads_1 = require("worker_threads");
const timestampConversion = {
[types_1.TimestampFormat.Iso]: 'toISOString',
[types_1.TimestampFormat.Utc]: 'toUTCString',
[types_1.TimestampFormat.Gmt]: 'toGMTString',
[types_1.TimestampFormat.TimeString]: 'toTimeString',
[types_1.TimestampFormat.LocaleString]: 'toLocaleString',
[types_1.TimestampFormat.UnixTimestamp]: 'getTime',
};
const DEFAULT_LOG_FORMAT = '{timestamp} [{type}] {message} [{path}] {tags}';
const DEFAULT_PATH_FORMAT = '{filePath}:{lineNumber}';
class StructuredLogger {
constructor(options = {}) {
_StructuredLogger_instances.add(this);
const defaultOptions = {
timestampFormat: types_1.TimestampFormat.Iso,
logFormat: DEFAULT_LOG_FORMAT,
pathFormat: DEFAULT_PATH_FORMAT,
pathStackDepth: 0,
useColors: false,
useThreadTagsExtension: false,
useLogIdExtension: false
};
this.config = { ...defaultOptions, ...options };
this.caller = new caller_1._InternalCaller(this.constructor.name);
}
debug(message, tags) {
const caller = this.caller.getCaller(this.config.pathStackDepth);
__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_log).call(this, types_1.LogType.Debug, caller, message, tags);
}
info(message, tags) {
const caller = this.caller.getCaller(this.config.pathStackDepth);
__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_log).call(this, types_1.LogType.Info, caller, message, tags);
}
log(message, tags) {
const caller = this.caller.getCaller(this.config.pathStackDepth);
__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_log).call(this, types_1.LogType.Log, caller, message, tags);
}
error(message, tags) {
const caller = this.caller.getCaller(this.config.pathStackDepth);
__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_log).call(this, types_1.LogType.Error, caller, message, tags);
}
warn(message, tags) {
const caller = this.caller.getCaller(this.config.pathStackDepth);
__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_log).call(this, types_1.LogType.Warn, caller, message, tags);
}
}
exports.StructuredLogger = StructuredLogger;
_StructuredLogger_instances = new WeakSet(), _StructuredLogger_log = function _StructuredLogger_log(type, caller, message, tags = {}) {
const tagsString = (0, utils_1.parseTagsAsString)(__classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_enrichTags).call(this, tags));
const timestamp = __classPrivateFieldGet(this, _StructuredLogger_instances, "m", _StructuredLogger_getCurrentTimestampInDesiredFormat).call(this);
let path = '';
if (caller) {
path = this.config.pathFormat;
path = path.replace('{filePath}', caller.filePath);
path = path.replace('{lineNumber}', caller.lineNumber.toString());
path = path.replace('{functionName}', caller.functionName);
path = path.replace('{methodName}', caller.methodName);
path = path.replace('{typeName}', caller.typeName);
}
let log = this.config.logFormat;
log = log.replace('{timestamp}', timestamp);
log = log.replace('{message}', message);
log = log.replace('{type}', type);
log = log.replace('{path}', path);
log = log.replace('{tags}', tagsString);
if (this.config.useColors) {
log = (0, utils_1.colorText)(type, log);
}
console[type](log);
}, _StructuredLogger_getCurrentTimestampInDesiredFormat = function _StructuredLogger_getCurrentTimestampInDesiredFormat() {
const date = new Date();
return date[timestampConversion[this.config.timestampFormat] ?? 'toIsoString']();
}, _StructuredLogger_enrichTags = function _StructuredLogger_enrichTags(tags) {
const enrichmentTags = {};
if (this.config.useThreadTagsExtension) {
enrichmentTags['thread'] = worker_threads_1.isMainThread ? 'MAIN' : worker_threads_1.threadId;
}
if (this.config.useLogIdExtension) {
enrichmentTags['logId'] = new uuid_1.UUIDT().toString();
}
return { ...enrichmentTags, ...tags };
};
// for easy use, export a ready instance of StructuredLogger with the default config
exports.logger = new StructuredLogger();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsdUNBQXFDO0FBQ3JDLHlDQUFpRTtBQUNqRSx5Q0FBNkU7QUFDN0UseUNBQTREO0FBQzVELG1EQUF1RDtBQUV2RCxNQUFNLG1CQUFtQixHQUFvQztJQUMzRCxDQUFDLHVCQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYTtJQUNwQyxDQUFDLHVCQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYTtJQUNwQyxDQUFDLHVCQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYTtJQUNwQyxDQUFDLHVCQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsY0FBYztJQUM1QyxDQUFDLHVCQUFlLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCO0lBQ2hELENBQUMsdUJBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTO0NBQzNDLENBQUE7QUFFRCxNQUFNLGtCQUFrQixHQUFHLGdEQUFnRCxDQUFBO0FBQzNFLE1BQU0sbUJBQW1CLEdBQUcseUJBQXlCLENBQUE7QUFDckQsTUFBYSxnQkFBZ0I7SUFLM0IsWUFBWSxVQUErQixFQUFFOztRQUMzQyxNQUFNLGNBQWMsR0FBZTtZQUNqQyxlQUFlLEVBQUUsdUJBQWUsQ0FBQyxHQUFHO1lBQ3BDLFNBQVMsRUFBRSxrQkFBa0I7WUFDN0IsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixjQUFjLEVBQUUsQ0FBQztZQUNqQixTQUFTLEVBQUUsS0FBSztZQUNoQixzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FBQTtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSx3QkFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMs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