Bugs im Flug einfangen: Monitoring und Logging von JavaScript-Anwendungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum schreit Ihr JavaScript-Code um Hilfe, aber Sie hören es nicht?

\n\n

Stellen Sie sich vor: Sie haben eine tolle Webanwendung gestartet. Benutzer kommen herein, klicken, alles funktioniert … oder etwa nicht? In Wirklichkeit tritt irgendwo in den Tiefen des Browsers leise ein Fehler auf: Uncaught TypeError: Cannot read property 'length' of undefined. Der Benutzer schließt einfach den Tab und geht zur Konkurrenz, und Sie erfahren nicht einmal, dass etwas schiefgelaufen ist.

\n\n

Willkommen in der Realität der Frontend-Entwicklung. Ohne Monitoring und Logging von JavaScript-Anwendungen arbeiten Sie im Blindflug. Aber keine Sorge – heute schauen wir uns an, wie Sie das Chaos der Fehler in ein strukturiertes Benachrichtigungssystem verwandeln. Sie erfahren, wie Sie Ereignisse richtig protokollieren, die Leistung überwachen und nicht in einem Meer von Daten untergehen.

\n\n

Dieser Artikel ist Ihr Spickzettel fürs Überleben in der Produktion. Los geht's!

\n\n

Console.log – Ihr Freund oder Feind?

\n\n

Beginnen wir mit den Grundlagen. console.log() ist das Erste, was jedem Entwickler in den Sinn kommt. Und das ist in Ordnung. Aber wenn Sie es im Produktionscode verwenden, halten Sie inne. Warum? Weil:

\n\n
    \n
  • Es die Konsole des Benutzers verstopft (ja, manche öffnen sie).
  • \n
  • Es die Leistung bei vielen Aufrufen beeinträchtigt.
  • \n
  • Es keine strukturierten Informationen liefert.
  • \n
\n\n

Verwenden Sie stattdessen Logging-Ebenen. Hier ist ein Beispiel für den richtigen Ansatz:

\n\n
// Schlecht\nconsole.log('Benutzer hat Button geklickt');\n\n// Gut\nconsole.info('Benutzerinteraktion', { \n    action: 'click', \n    element: '#submit-btn', \n    timestamp: Date.now() \n});\n\n// Für Fehler\nconsole.error('API-Anfrage fehlgeschlagen', { \n    status: 500, \n    endpoint: '/api/users' \n});\n\n// Für Warnungen\nconsole.warn('Veraltete Methode verwendet', { \n    method: 'fetchData_v1' \n});
\n\n

Aber selbst das ist nur die Spitze des Eisbergs. Echtes Monitoring von JavaScript-Anwendungen beginnt dort, wo die Konsole nicht verfügbar ist.

\n\n

Strukturiertes Logging: JSON zur Hilfe

\n\n

Wenn Ihre Anwendung wächst, werden chaotische Konsolenmeldungen zu einem undurchsichtigen Brei. Die Lösung ist strukturiertes Logging. Senden Sie Daten im JSON-Format, damit sie geparst und analysiert werden können.

\n\n

So können Sie einen einfachen Logger erstellen:

\n\n
class Logger {\n    constructor(context = {}) {\n        this.context = context;\n    }\n\n    log(level, message, data = {}) {\n        const logEntry = {\n            timestamp: new Date().toISOString(),\n            level,\n            message,\n            ...this.context,\n            ...data\n        };\n\n        // In der Produktion an den Server senden\n        if (process.env.NODE_ENV === 'production') {\n            this.sendToServer(logEntry);\n        } else {\n            // In der Entwicklung in der Konsole ausgeben\n            console[level](`[${level.toUpperCase()}] ${message}`, data);\n        }\n    }\n\n    sendToServer(entry) {\n        // sendBeacon für garantierte Zustellung verwenden\n        navigator.sendBeacon('/api/logs', JSON.stringify(entry));\n    }\n\n    info(message, data) { this.log('info', message, data); }\n    warn(message, data) { this.log('warn', message, data); }\n    error(message, data) { this.log('error', message, data); }\n}\n\n// Verwendung\nconst logger = new Logger({ appVersion: '1.2.3', userId: getUserId() });\nlogger.info('Seite geladen', { url: window.location.href, loadTime: performance.now() });
\n\n

Beachten Sie navigator.sendBeacon() – dies ist die beste Methode, um Daten zu senden, bevor ein Benutzer die Seite verlässt. Normale fetch-Anfragen können abgebrochen werden.

\n\n

Fehlererkennung: try/catch ist erst der Anfang

\n\n

Globale Fehler sind die tückischsten. Sie können überall auftreten und leicht übersehen werden. So richten Sie ein umfassendes Monitoring von JavaScript-Fehlern ein:

\n\n

Globaler Fehlerhandler

\n\n
// Unbehandelte Fehler abfangen\nw                

Blogs

Buchempfehlungen