@genkit-ai/core
Version:
Genkit AI framework core libraries.
119 lines • 3.21 kB
JavaScript
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