@atomic-utils/logger
Version:
94 lines • 3.79 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SentryHandlers = exports.SentryTransport = void 0;
const logger_1 = require("@node-dlc/logger");
const Sentry = __importStar(require("@sentry/node"));
class SentryTransport {
constructor(nodeOptions, tags = []) {
// Only initialize Sentry if it hasn't been initialized yet
// In test scenarios, Sentry may already be initialized by sentry-testkit
try {
const currentClient = Sentry.getCurrentHub().getClient();
if (!currentClient && nodeOptions) {
Sentry.init(nodeOptions);
}
}
catch (e) {
// If Sentry hasn't been initialized at all, initialize it
if (nodeOptions) {
Sentry.init(nodeOptions);
}
}
tags.forEach((tag) => {
Sentry.setTag(tag.key, tag.value);
});
}
write(line, level, error) {
// Parse log level from the formatted message since @node-dlc/logger@0.24.0
// doesn't pass the level parameter correctly
const parsedLevel = this.parseLogLevel(line);
switch (parsedLevel) {
case logger_1.LogLevel.Warn:
Sentry.captureMessage(line);
break;
case logger_1.LogLevel.Error:
Sentry.withScope((scope) => {
scope.setExtra('log', line);
// Extract error message from formatted log and create Error object
const errorMessage = this.extractErrorMessage(line);
if (errorMessage) {
Sentry.captureException(new Error(errorMessage));
}
else {
Sentry.captureException(line);
}
});
break;
default:
}
}
parseLogLevel(line) {
if (line.includes('[WRN]:') || line.includes('[WARN]:')) {
return logger_1.LogLevel.Warn;
}
if (line.includes('[ERR]:') || line.includes('[ERROR]:')) {
return logger_1.LogLevel.Error;
}
return undefined;
}
extractErrorMessage(line) {
// Extract error message from formatted log like: "2025-06-03T15:52:24.761Z [ERR]: Error: testing"
const errorMatch = line.match(/\[ERR\]: Error: (.+)/);
if (errorMatch && errorMatch[1]) {
// Get just the first line of the error message (before stack trace)
return errorMatch[1].split('\n')[0];
}
return null;
}
}
exports.SentryTransport = SentryTransport;
exports.SentryHandlers = Sentry.Handlers;
//# sourceMappingURL=sentry-transport.js.map