@genkit-ai/core
Version:
Genkit AI framework core libraries.
1 lines • 7.02 kB
Source Map (JSON)
{"version":3,"sources":["../src/logging.ts"],"sourcesContent":["/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context } from '@opentelemetry/api';\nimport { logs, SeverityNumber } from '@opentelemetry/api-logs';\n\nconst LOG_LEVELS = ['debug', 'info', 'warn', 'error'];\n\nconst loggerKey = '__genkit_logger';\n\nconst _defaultLogger = {\n shouldLog(targetLevel: string) {\n return LOG_LEVELS.indexOf(this.level) <= LOG_LEVELS.indexOf(targetLevel);\n },\n debug(...args: any) {\n this.shouldLog('debug') && console.debug(...args);\n },\n info(...args: any) {\n this.shouldLog('info') && console.info(...args);\n },\n warn(...args: any) {\n this.shouldLog('warn') && console.warn(...args);\n },\n error(...args: any) {\n this.shouldLog('error') && console.error(...args);\n },\n level: 'info',\n};\n\nfunction getLogger() {\n if (!global[loggerKey]) {\n global[loggerKey] = _defaultLogger;\n }\n return global[loggerKey];\n}\n\nclass Logger {\n readonly defaultLogger = _defaultLogger;\n\n private _emitOtel(\n level: string,\n args: any[],\n explicitBody?: string,\n explicitAttributes?: Record<string, any>\n ) {\n if (process.env.GENKIT_OTEL_ENABLE_LOGS !== 'true') {\n return;\n }\n\n try {\n const currentLevel = getLogger().level || 'info';\n if (LOG_LEVELS.indexOf(currentLevel) > LOG_LEVELS.indexOf(level)) {\n return;\n }\n\n const otelLogger = logs.getLogger('genkit-logger');\n let severityNumber: SeverityNumber;\n switch (level) {\n case 'debug':\n severityNumber = SeverityNumber.DEBUG;\n break;\n case 'info':\n severityNumber = SeverityNumber.INFO;\n break;\n case 'warn':\n severityNumber = SeverityNumber.WARN;\n break;\n case 'error':\n severityNumber = SeverityNumber.ERROR;\n break;\n default:\n severityNumber = SeverityNumber.UNSPECIFIED;\n break;\n }\n\n let body;\n const attributes: Record<string, any> = explicitAttributes || {};\n if (explicitBody !== undefined) {\n body = explicitBody;\n } else if (args.length === 1 && typeof args[0] === 'string') {\n body = args[0];\n } else {\n const util = require('util');\n body = util.format(...args);\n }\n\n let activeContext;\n try {\n activeContext = context.active();\n } catch (e) {\n // No-op if @opentelemetry/api trace is uninitialized or missing right now\n }\n\n otelLogger.emit({\n severityNumber,\n severityText: level.toUpperCase(),\n body,\n attributes,\n ...(activeContext ? { context: activeContext } : {}),\n });\n } catch (err) {\n // safe ignore\n }\n }\n\n init(fn: any) {\n global[loggerKey] = fn;\n }\n\n info(...args: any) {\n // eslint-disable-next-line prefer-spread\n getLogger().info.apply(getLogger(), args);\n this._emitOtel('info', args);\n }\n debug(...args: any) {\n // eslint-disable-next-line prefer-spread\n getLogger().debug.apply(getLogger(), args);\n this._emitOtel('debug', args);\n }\n error(...args: any) {\n // eslint-disable-next-line prefer-spread\n getLogger().error.apply(getLogger(), args);\n this._emitOtel('error', args);\n }\n warn(...args: any) {\n // eslint-disable-next-line prefer-spread\n getLogger().warn.apply(getLogger(), args);\n this._emitOtel('warn', args);\n }\n\n setLogLevel(level: 'error' | 'warn' | 'info' | 'debug') {\n getLogger().level = level;\n }\n\n logStructured(msg: string, metadata: any) {\n getLogger().info(msg, metadata);\n this._emitOtel('info', [], msg, metadata);\n }\n\n logStructuredError(msg: string, metadata: any) {\n getLogger().error(msg, metadata);\n this._emitOtel('error', [], msg, metadata);\n }\n}\n\n/**\n * Genkit logger.\n *\n * ```ts\n * import { logger } from 'genkit/logging';\n *\n * logger.setLogLevel('debug');\n * ```\n */\nexport const logger = new Logger();\n"],"mappings":"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","names":[]}