grafana-logger
Version:
A functional logging package for Grafana with structured JSON output
177 lines • 6.58 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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
import { performance } from "perf_hooks";
function createLogger(baseEntry, timers) {
function logEntry(level, message, duration) {
var logEntry = {
timestamp: baseEntry.timestamp || new Date().toISOString(),
level: level,
message: message,
service: baseEntry.service,
};
for (var _i = 0, _a = Object.entries(baseEntry); _i < _a.length; _i++) {
var _b = _a[_i], key = _b[0], value = _b[1];
if (!["timestamp", "level", "message", "service"].includes(key) &&
value !== undefined) {
;
logEntry[key] = value;
}
}
if (duration !== undefined) {
logEntry.duration_ms = duration;
}
var seen = new WeakSet();
var jsonOutput = JSON.stringify(logEntry, function (_key, value) {
if (typeof value === "object" && value !== null) {
if (seen.has(value)) {
return "[Circular]";
}
seen.add(value);
}
return value;
});
// Use appropriate console method based on log level
switch (level) {
case "debug":
console.debug(jsonOutput);
break;
case "info":
console.info(jsonOutput);
break;
case "warn":
console.warn(jsonOutput);
break;
case "error":
case "fatal":
console.error(jsonOutput);
break;
case "trace":
console.trace(jsonOutput);
break;
case "timer":
console.log(jsonOutput);
break;
default:
console.log(jsonOutput);
}
}
return {
component: function (component) {
return createLogger(__assign(__assign({}, baseEntry), { component: component }), timers);
},
traceFile: function (traceFile) {
return createLogger(__assign(__assign({}, baseEntry), { trace_file: traceFile }), timers);
},
requestPayload: function (payload) {
return createLogger(__assign(__assign({}, baseEntry), { request_payload: payload }), timers);
},
context: function (context) {
return createLogger(__assign(__assign({}, baseEntry), { context: context }), timers);
},
processId: function (processId) {
return createLogger(__assign(__assign({}, baseEntry), { process_id: processId }), timers);
},
traceId: function (traceId) {
return createLogger(__assign(__assign({}, baseEntry), { trace_id: traceId }), timers);
},
tags: function (tags) {
return createLogger(__assign(__assign({}, baseEntry), { tags: __spreadArray([], tags, true) }), timers);
},
tag: function (tag) {
var existingTags = baseEntry.tags || [];
return createLogger(__assign(__assign({}, baseEntry), { tags: __spreadArray(__spreadArray([], existingTags, true), [tag], false) }), timers);
},
debug: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("debug", message);
},
info: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("info", message);
},
warn: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("warn", message);
},
error: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("error", message);
},
fatal: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("fatal", message);
},
trace: function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var message = args.map(String).join(" ");
logEntry("trace", message);
},
child: function (metadata) {
return createLogger(__assign(__assign({}, baseEntry), metadata), timers);
},
time: function (name) {
timers.set(name, performance.now());
},
timeEnd: function (name) {
var startTime = timers.get(name);
if (startTime !== undefined) {
var duration = performance.now() - startTime;
timers.delete(name);
logEntry("timer", "Timer ".concat(name, ": ").concat(duration.toFixed(2), "ms"), Math.round(duration));
}
else {
logEntry("warn", "Timer '".concat(name, "' does not exist"));
}
},
};
}
export function gl(service) {
var timers = new Map();
var baseEntry = {
service: service,
process_id: process.pid.toString(),
};
return createLogger(baseEntry, timers);
}
//# sourceMappingURL=logger.js.map