Files
oikos/server/logger.js
T
2026-04-25 12:34:10 -03:00

47 lines
1.4 KiB
JavaScript

/**
* Modul: Logger
* Zweck: Levelbasiertes strukturiertes Logging ohne externe Dependencies.
* Ausgabe als JSON in Production, lesbar in Development.
* Steuerung: LOG_LEVEL env var (debug, info, warn, error). Default: info.
*/
const LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
const currentLevel = LEVELS[process.env.LOG_LEVEL] ?? LEVELS.info;
const isProduction = process.env.NODE_ENV === 'production';
function emit(level, mod, msg, extra) {
if (LEVELS[level] < currentLevel) return;
const normalizedExtra = extra instanceof Error
? {
name: extra.name,
message: extra.message,
stack: extra.stack,
}
: extra;
if (isProduction) {
const entry = { ts: new Date().toISOString(), level, mod, msg };
if (normalizedExtra !== undefined) entry.extra = normalizedExtra;
process.stdout.write(JSON.stringify(entry) + '\n');
} else {
const prefix = `[${mod}]`;
if (normalizedExtra !== undefined) {
console[level === 'debug' ? 'log' : level](prefix, msg, normalizedExtra);
} else {
console[level === 'debug' ? 'log' : level](prefix, msg);
}
}
}
function createLogger(mod) {
return {
debug: (msg, extra) => emit('debug', mod, msg, extra),
info: (msg, extra) => emit('info', mod, msg, extra),
warn: (msg, extra) => emit('warn', mod, msg, extra),
error: (msg, extra) => emit('error', mod, msg, extra),
};
}
export { createLogger };