Descripción
Actualmente ITLA Plus no cuenta con un sistema de logging estructurado que permita depurar problemas, monitorear el comportamiento de los plugins y facilitar el desarrollo. Se requiere implementar un logger centralizado que proporcione diferentes niveles de registro y sea fácil de usar en todos los módulos.
Motivación
- Depuración mejorada: Facilitar la identificación de errores y comportamientos inesperados
- Desarrollo más eficiente: Permitir a los desarrolladores rastrear el flujo de ejecución
- Diagnóstico de problemas: Ayudar a los usuarios a reportar issues con información detallada
- Monitoreo de plugins: Visualizar el ciclo de vida y estado de cada plugin
Propuesta de Implementación
Niveles de Log
El logger debería soportar los siguientes niveles:
DEBUG: Información detallada para desarrollo
INFO: Mensajes informativos generales
WARN: Advertencias que no detienen la ejecución
ERROR: Errores que requieren atención
Estructura Sugerida
// src/modules/services/LoggerService.ts
export enum LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3
}
export interface LogEntry {
timestamp: Date;
level: LogLevel;
plugin?: string;
message: string;
data?: any;
}
export class Logger {
private static instance: Logger;
private logLevel: LogLevel = LogLevel.INFO;
private logs: LogEntry[] = [];
static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return LoggerService.instance;
}
setLogLevel(level: LogLevel): void { }
debug(message: string, data?: any, plugin?: string): void { }
info(message: string, data?: any, plugin?: string): void { }
warn(message: string, data?: any, plugin?: string): void { }
error(message: string, error?: Error, plugin?: string): void { }
getLogs(): LogEntry[] { }
clearLogs(): void { }
exportLogs(): string { }
}
Características Deseadas
Ejemplo de Uso
// En cualquier plugin
import { Logger } from '../services/Logger';
export class AutoLogin implements Plugin {
private logger = Logger.getInstance();
async init(): Promise {
this.logger.info('Inicializando plugin AutoLogin', null, 'AutoLogin');
try {
// ... lógica del plugin
this.logger.debug('Credenciales cargadas exitosamente', { hasCredentials: true }, 'AutoLogin');
} catch (error) {
this.logger.error('Error al cargar credenciales', error as Error, 'AutoLogin');
}
}
}
Formato de Salida en Consola
[2025-10-16 14:30:45] [INFO] [AutoLogin] Inicializando plugin AutoLogin
[2025-10-16 14:30:45] [DEBUG] [AutoLogin] Credenciales cargadas exitosamente
[2025-10-16 14:30:46] [ERROR] [PointsTracker] Error al obtener calificaciones: Network timeout
Beneficios
- Mejor experiencia de desarrollo
- Facilita la contribución de nuevos desarrolladores
- Simplifica el proceso de reportar y resolver bugs
- Permite monitorear el rendimiento de los plugins
- Base para futuras herramientas de diagnóstico
Tareas
Notas Adicionales
- El logger no debe afectar el rendimiento del script
- Considerar añadir una opción en el menú de Tampermonkey para cambiar el nivel de log
- Los logs nunca deben contener información sensible (contraseñas, tokens, etc.)
- Evaluar si es necesario persistir logs en localStorage o mantenerlos solo en memoria
Referencias
Prioridad: Media
Tipo: Enhancement
Módulo: Core Services
Descripción
Actualmente ITLA Plus no cuenta con un sistema de logging estructurado que permita depurar problemas, monitorear el comportamiento de los plugins y facilitar el desarrollo. Se requiere implementar un logger centralizado que proporcione diferentes niveles de registro y sea fácil de usar en todos los módulos.
Motivación
Propuesta de Implementación
Niveles de Log
El logger debería soportar los siguientes niveles:
DEBUG: Información detallada para desarrolloINFO: Mensajes informativos generalesWARN: Advertencias que no detienen la ejecuciónERROR: Errores que requieren atenciónEstructura Sugerida
Características Deseadas
Ejemplo de Uso
Formato de Salida en Consola
Beneficios
Tareas
Logger.tsensrc/modules/services/Notas Adicionales
Referencias
Prioridad: Media
Tipo: Enhancement
Módulo: Core Services