task(A0): logger and test helpers
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Minimaler Level-basierter Logger.
|
||||
* Ziel: direktes `console.log` im Produktivcode ersetzen (ROADMAP Teil-4-Regel),
|
||||
* damit sich Logs zentral filtern/abschalten lassen.
|
||||
*
|
||||
* Nutzung:
|
||||
* import { logger } from '../utils/logger';
|
||||
* logger.info('Element erstellt', el.id);
|
||||
*
|
||||
* Level über localStorage['webcad.logLevel'] ('silent'|'error'|'warn'|'info'|'debug',
|
||||
* Default: 'info'). `logger.debug` bleibt auf Default still.
|
||||
*/
|
||||
|
||||
export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
|
||||
|
||||
const LEVEL_ORDER: Record<LogLevel, number> = {
|
||||
silent: 100,
|
||||
error: 40,
|
||||
warn: 30,
|
||||
info: 20,
|
||||
debug: 10,
|
||||
};
|
||||
|
||||
function readConfiguredLevel(): LogLevel {
|
||||
try {
|
||||
// Browser und jsdom haben localStorage; in reinen Node-Tests schlägt der Zugriff fehl
|
||||
const raw = globalThis.localStorage?.getItem('webcad.logLevel');
|
||||
if (raw && raw in LEVEL_ORDER) return raw as LogLevel;
|
||||
} catch {
|
||||
/* Umgebung ohne localStorage → Default */
|
||||
}
|
||||
return 'info';
|
||||
}
|
||||
|
||||
let currentLevel: LogLevel = readConfiguredLevel();
|
||||
|
||||
/** Setzt das Level programmatisch (überschreibt localStorage bis zum Reload). */
|
||||
export function setLogLevel(level: LogLevel): void {
|
||||
currentLevel = level;
|
||||
}
|
||||
|
||||
/** Aktuell aktives Log-Level. */
|
||||
export function getLogLevel(): LogLevel {
|
||||
return currentLevel;
|
||||
}
|
||||
|
||||
class Logger {
|
||||
/** Fehlerhafte Zustände — melden außer bei silent. */
|
||||
error(...args: unknown[]): void {
|
||||
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.error) console.error('[web-cad]', ...args);
|
||||
}
|
||||
|
||||
/** Warnungen. */
|
||||
warn(...args: unknown[]): void {
|
||||
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.warn) console.warn('[web-cad]', ...args);
|
||||
}
|
||||
|
||||
/** Normale Informationsmeldungen (Default-Level aktiv). */
|
||||
info(...args: unknown[]): void {
|
||||
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.info) console.log('[web-cad]', ...args);
|
||||
}
|
||||
|
||||
/** Debug-Ausgaben — nur wenn Level debug konfiguriert ist. */
|
||||
debug(...args: unknown[]): void {
|
||||
if (LEVEL_ORDER[currentLevel] <= LEVEL_ORDER.debug) console.log('[web-cad][debug]', ...args);
|
||||
}
|
||||
}
|
||||
|
||||
export const logger = new Logger();
|
||||
Reference in New Issue
Block a user