UNPKG

@genkit-ai/core

Version:

Genkit AI framework core libraries.

119 lines 3.21 kB
import { context } from "@opentelemetry/api"; import { logs, SeverityNumber } from "@opentelemetry/api-logs"; const LOG_LEVELS = ["debug", "info", "warn", "error"]; const loggerKey = "__genkit_logger"; const _defaultLogger = { shouldLog(targetLevel) { return LOG_LEVELS.indexOf(this.level) <= LOG_LEVELS.indexOf(targetLevel); }, debug(...args) { this.shouldLog("debug") && console.debug(...args); }, info(...args) { this.shouldLog("info") && console.info(...args); }, warn(...args) { this.shouldLog("warn") && console.warn(...args); }, error(...args) { this.shouldLog("error") && console.error(...args); }, level: "info" }; function getLogger() { if (!global[loggerKey]) { global[loggerKey] = _defaultLogger; } return global[loggerKey]; } class Logger { defaultLogger = _defaultLogger; _emitOtel(level, args, explicitBody, explicitAttributes) { if (process.env.GENKIT_OTEL_ENABLE_LOGS !== "true") { return; } try { const currentLevel = getLogger().level || "info"; if (LOG_LEVELS.indexOf(currentLevel) > LOG_LEVELS.indexOf(level)) { return; } const otelLogger = logs.getLogger("genkit-logger"); let severityNumber; switch (level) { case "debug": severityNumber = SeverityNumber.DEBUG; break; case "info": severityNumber = SeverityNumber.INFO; break; case "warn": severityNumber = SeverityNumber.WARN; break; case "error": severityNumber = SeverityNumber.ERROR; break; default: severityNumber = SeverityNumber.UNSPECIFIED; break; } let body; const attributes = explicitAttributes || {}; if (explicitBody !== void 0) { body = explicitBody; } else if (args.length === 1 && typeof args[0] === "string") { body = args[0]; } else { const util = require("util"); body = util.format(...args); } let activeContext; try { activeContext = context.active(); } catch (e) { } otelLogger.emit({ severityNumber, severityText: level.toUpperCase(), body, attributes, ...activeContext ? { context: activeContext } : {} }); } catch (err) { } } init(fn) { global[loggerKey] = fn; } info(...args) { getLogger().info.apply(getLogger(), args); this._emitOtel("info", args); } debug(...args) { getLogger().debug.apply(getLogger(), args); this._emitOtel("debug", args); } error(...args) { getLogger().error.apply(getLogger(), args); this._emitOtel("error", args); } warn(...args) { getLogger().warn.apply(getLogger(), args); this._emitOtel("warn", args); } setLogLevel(level) { getLogger().level = level; } logStructured(msg, metadata) { getLogger().info(msg, metadata); this._emitOtel("info", [], msg, metadata); } logStructuredError(msg, metadata) { getLogger().error(msg, metadata); this._emitOtel("error", [], msg, metadata); } } const logger = new Logger(); export { logger }; //# sourceMappingURL=logging.mjs.map