/
difight
/
ruEngine
Обзор
Документация
Войти
/
difight
/
ruEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
client/src/engine/utils/Logger.ts
95 строк
3 KB
Andrey Bashkirev
refactor and add readme
30 июл 2025, 19:33
30 июл 2025, 19:33
714c914
Код
Авторство
О чём код?
/** * Класс для логирования сообщений разного уровня (debug, info, warn, error) */ export class Logger { private static isDebugEnabled = false; private static showSourceLocation = false; /** * Включить или выключить режим debug * @param enabled Включить debug-режим */ static setDebugMode(enabled: boolean): void { this.isDebugEnabled = enabled; } /** * Включить или выключить отображение информации о месте вызова * @param enabled Включить отображение source location */ static setShowSourceLocation(enabled: boolean): void { this.showSourceLocation = enabled; } /** * Лог debug-сообщения * @param message Сообщение * @param args Аргументы для форматирования */ static debug(message: string, ...args: any[]): void { if (this.isDebugEnabled) { const formattedMessage = this.formatMessage(message, args); const sourceInfo = this.showSourceLocation ? this.getSourceInfo() : ""; console.log(`[DEBUG] ${formattedMessage}${sourceInfo}`); } } /** * Получить информацию о месте вызова (строка стека) * @returns Строка с информацией о месте вызова */ static getSourceInfo(): string { try { const err = new Error(); const stackLines = err.stack?.split("\n") || []; // Пропускаем первые строки (логгер, метод getSourceInfo) const relevantLine = stackLines[3]?.trim(); return relevantLine ? `\n${relevantLine}` : ""; } catch (e) { console.error('[Logger] Failed to get source info:', e); return ""; } } /** * Лог info-сообщения * @param message Сообщение * @param args Аргументы для форматирования */ static info(message: string, ...args: any[]): void { console.info(`[INFO] ${this.formatMessage(message, args)}`); } /** * Лог предупреждения * @param message Сообщение * @param args Аргументы для форматирования */ static warn(message: string, ...args: any[]): void { console.warn(`[WARN] ${this.formatMessage(message, args)}`); } /** * Лог ошибки * @param message Сообщение * @param args Аргументы для форматирования */ static error(message: string, ...args: any[]): void { console.error(`[ERROR] ${this.formatMessage(message, args)}`); } /** * Форматировать сообщение с подстановкой аргументов и таймстампом * @param message Сообщение с плейсхолдерами * @param args Аргументы для подстановки * @returns Отформатированная строка */ private static formatMessage(message: string, args: any[]): string { const timestamp = new Date().toISOString(); return `${timestamp} - ${message.replace(/{(\d+)}/g, (_, i) => { const arg = args[i]; // Сериализация объектов/массивов return typeof arg === "object" ? JSON.stringify(arg, null, 2) : String(arg); })}`; } }