langcode
Version:
A Plugin-Based Framework for Managing and Using LangChain
140 lines (139 loc) • 5.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = exports.Logger = void 0;
exports.createLogger = createLogger;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const events_1 = require("events");
const chalk_1 = __importDefault(require("chalk"));
class Logger extends events_1.EventEmitter {
constructor(loggerargs) {
var _a, _b, _c;
super();
this.toConsole = (_a = loggerargs === null || loggerargs === void 0 ? void 0 : loggerargs.debug) !== null && _a !== void 0 ? _a : false;
this.filePath = (_b = loggerargs === null || loggerargs === void 0 ? void 0 : loggerargs.filePath) !== null && _b !== void 0 ? _b : "./debug/langcode.log";
this.tag = (_c = loggerargs === null || loggerargs === void 0 ? void 0 : loggerargs.tag) !== null && _c !== void 0 ? _c : null;
// Dosya hazırlığı
if (this.filePath) {
const dir = path_1.default.dirname(this.filePath);
if (!fs_1.default.existsSync(dir)) {
fs_1.default.mkdirSync(dir, { recursive: true });
}
fs_1.default.writeFileSync(this.filePath, "Langoce Log Başladı:\n", { flag: "w" });
}
}
// Log seviyeleri
info(message, data) {
this.logInternal("info", message, data);
}
warn(message, data) {
this.logInternal("warn", message, data);
}
error(message, data) {
this.logInternal("error", message, data);
}
success(message, data) {
this.logInternal("success", message, data);
}
debug(message, data) {
this.logInternal("debug", message, data);
}
/**
* İç metod: hem konsol/dosyaya yazıyor hem event emit ediyor.
*/
logInternal(level, message, data) {
var _a;
const time = new Date().toISOString();
const plainOutput = `[${time}] [${level.toUpperCase()}] ${message}`;
if (this.toConsole) {
const coloredOutput = this.colorize(level, plainOutput);
if (data) {
console.log(coloredOutput, "\n", this.colorize(level, this.safeSerialize(data)));
}
else {
console.log(coloredOutput);
}
}
if (this.filePath) {
let fileOut = plainOutput;
if (data) {
fileOut += "\n" + this.safeSerialize(data);
}
fs_1.default.appendFileSync(this.filePath, fileOut + "\n");
}
const payload = { level, time, message, data };
const eventName = this.tag ? `${this.tag}:${level}` : level;
const baseEvent = (_a = this.tag) !== null && _a !== void 0 ? _a : level;
this.emit(eventName, payload);
this.emit(baseEvent, payload);
}
/**
* Renkli konsol çıktısı için chalk
*/
// private colorize(level: LogLevel, text: string): string {
// switch (level) {
// case "info":
// return chalk.blue(text);
// case "warn":
// return chalk.yellow(text);
// case "error":
// return chalk.red(text);
// case "success":
// return chalk.green(text);
// case "debug":
// return chalk.cyan(text);
// default:
// return text;
// }
// }
colorize(level, text) {
switch (level) {
case "info":
return chalk_1.default.hex("#0099ff")(text); // özel mavi
case "warn":
return chalk_1.default.hex("#ffff00")(text); // sarı
case "error":
return chalk_1.default.hex("#ff0000")(text); // gerçek kırmızı
case "success":
return chalk_1.default.hex("#00cc00")(text); // yeşil
case "debug":
return chalk_1.default.hex("#aaaaaa")(text); // gri
default:
return text;
}
}
/**
* Nesneleri güvenle serileştirme
*/
safeSerialize(data) {
try {
return JSON.stringify(data, this.replacer, 2);
}
catch (_a) {
return "[Unserializable Data]";
}
}
replacer(key, value) {
var _a;
if (typeof value === "function")
return "[Function]";
if (typeof value === "object" && value !== null) {
const constructorName = (_a = value.constructor) === null || _a === void 0 ? void 0 : _a.name;
const allowed = ["Object", "Array", "Map", "Set"];
if (constructorName && !allowed.includes(constructorName)) {
return `[Instance of ${constructorName}]`;
}
}
return value;
}
}
exports.Logger = Logger;
/** Factory fonksiyonu (opsiyonel) */
function createLogger(args) {
return new Logger(args);
}
const logger = (loggerargs) => new Logger(loggerargs);
exports.logger = logger;