UNPKG

@atomic-utils/logger

Version:
94 lines 3.79 kB
"use strict"; 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