refactor(logging): replace console.* with structured logger across server

Add server/logger.js - zero-dependency, level-based logger that outputs
JSON in production and human-readable format in development. Controlled
via LOG_LEVEL env var (debug/info/warn/error, default: info).

Replaces all 100 console.log/warn/error calls in 14 server files.
This commit is contained in:
Ulas
2026-04-03 22:05:22 +02:00
parent 5b1e6915ac
commit 3b90074723
16 changed files with 185 additions and 100 deletions
+11 -6
View File
@@ -11,6 +11,11 @@ const express = require('express');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const path = require('path');
const { createLogger } = require('./logger');
const log = createLogger('Server');
const logSync = createLogger('Sync');
const logOikos = createLogger('Oikos');
// --------------------------------------------------------
// Datenbank initialisieren (muss vor require('./auth') stehen,
@@ -189,7 +194,7 @@ app.get('*', spaLimiter, (req, res) => {
// Globaler Error-Handler
// --------------------------------------------------------
app.use((err, req, res, _next) => {
console.error('[Server] Unbehandelter Fehler:', err);
log.error('Unbehandelter Fehler:', err);
res.status(500).json({ error: 'Interner Serverfehler.', code: 500 });
});
@@ -202,12 +207,12 @@ const SYNC_INTERVAL_MS = (parseInt(process.env.SYNC_INTERVAL_MINUTES, 10) || 15)
async function runSync() {
const { connected: googleConnected } = googleCalendar.getStatus();
if (googleConnected) {
googleCalendar.sync().catch((e) => console.error('[Sync] Google Fehler:', e.message));
googleCalendar.sync().catch((e) => logSync.error('Google Fehler:', e.message));
}
const { configured: appleConfigured } = appleCalendar.getStatus();
if (appleConfigured) {
appleCalendar.sync().catch((e) => console.error('[Sync] Apple Fehler:', e.message));
appleCalendar.sync().catch((e) => logSync.error('Apple Fehler:', e.message));
}
}
@@ -215,14 +220,14 @@ async function runSync() {
// Server starten
// --------------------------------------------------------
app.listen(PORT, () => {
console.log(`[Oikos] Server läuft auf Port ${PORT}`);
console.log(`[Oikos] Umgebung: ${process.env.NODE_ENV || 'development'}`);
logOikos.info(`Server laeuft auf Port ${PORT}`);
logOikos.info(`Umgebung: ${process.env.NODE_ENV || 'development'}`);
// Erster Sync nach 10 Sekunden (warten bis DB vollständig initialisiert)
setTimeout(() => {
runSync();
setInterval(runSync, SYNC_INTERVAL_MS);
console.log(`[Sync] Auto-Sync alle ${SYNC_INTERVAL_MS / 60_000} Minuten aktiv.`);
logSync.info(`Auto-Sync alle ${SYNC_INTERVAL_MS / 60_000} Minuten aktiv.`);
}, 10_000);
});