Logging in C++: Best Practices für Anfänger

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

Einleitung: Warum ist Logging in C++ notwendig?

\n\n

Logging (Protokollierung) ist der Prozess der Aufzeichnung von Ereignissen, die während der Ausführung eines Programms auftreten. Für Anfänger in der C++-Entwicklung mag es ausreichen, Fehler mit std::cout auf der Konsole auszugeben. In realen Projekten ist jedoch ein durchdachtes Logging ein entscheidendes Werkzeug für das Debugging, die Überwachung und die Analyse des Anwendungsverhaltens.

\n\n

Ohne ein Logging-System riskieren Sie:

\n
    \n
  • Seltene Bugs zu übersehen, die schwer reproduzierbar sind
  • \n
  • Die Diagnose von Problemen in der Produktion zu erschweren
  • \n
  • Unlesbaren Code mit verstreuten std::cout-Anweisungen zu erzeugen
  • \n
  • Informationen über die Ereignisabfolge bei einem Absturz zu verlieren
  • \n
\n\n

In diesem Artikel behandeln wir die besten Logging-Praktiken in C++ für Anfänger: von der Bibliotheksauswahl bis zur Leistungsoptimierung.

\n\n

Wichtige Bibliotheken für Logging in C++

\n\n

Warum sollte man keinen eigenen Logger schreiben?

\n

Viele Anfänger versuchen, eine eigene Klasse für das Logging zu schreiben. Das ist ein Fehler: Fertige Bibliotheken lösen bereits Probleme wie Leistung, Thread-Sicherheit, Dateirotation und flexible Formatierung. Betrachten wir zwei beliebte Optionen.

\n\n

1. spdlog – schnelle und moderne Wahl

\n

spdlog ist eine Header-Only-Bibliothek (erfordert keine Kompilierung), die als eine der schnellsten in C++ gilt. Sie unterstützt asynchrones Logging, viele Ausgabeformate (JSON, Prozentangaben, Farben in der Konsole) und eine einfache Konfiguration.

\n\n

Beispiel für die grundlegende Verwendung:

\n
#include <spdlog/spdlog.h>\n#include <spdlog/sinks/basic_file_sink.h>\n\nint main() {\n    // Logger erstellen, der in eine Datei schreibt\n    auto logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n    spdlog::set_default_logger(logger);\n    \n    // Log-Level\n    spdlog::info("Anwendung gestartet");\n    spdlog::warn("Niedriger Arbeitsspeicher: {}%", 15);\n    spdlog::error("Fehler bei der Datenbankverbindung");\n    \n    // Logging mit Kontext\n    spdlog::debug("Benutzer {} hat Aktion {} ausgeführt", "admin", 42);\n    \n    return 0;\n}
\n\n

2. Boost.Log – für Enterprise-Projekte

\n

Wenn Sie bereits Boost in Ihrem Projekt verwenden, ist Boost.Log eine ausgezeichnete Wahl. Es bietet maximale Flexibilität: Filterung nach Leveln, mehrere Senken (Datei, Konsole, syslog), Unterstützung für benutzerdefinierte Attribute.

\n\n

Beispiel für die Konfiguration:

\n
#include <boost/log/trivial.hpp>\n#include <boost/log/utility/setup/file.hpp>\n\nnamespace logging = boost::log;\n\nint main() {\n    // Datei-Senke hinzufügen\n    logging::add_file_log("logs/boost.log");\n    \n    BOOST_LOG_TRIVIAL(trace) << "Trace-Nachricht";\n    BOOST_LOG_TRIVIAL(info) << "Info-Nachricht";\n    BOOST_LOG_TRIVIAL(error) << "Kritischer Fehler";\n    \n    return 0;\n}
\n\n

Tipp für Anfänger: Beginnen Sie mit spdlog – es ist einfacher zu installieren (kopieren Sie einfach die Header-Dateien) und hat eine hervorragende Dokumentation.

\n\n

Log-Level: Wann was verwenden

\n

Die korrekte Verwendung von Log-Leveln ist die Grundlage für lesbare Logs. In C++ sind die folgenden Level üblich (von detailliert bis kritisch):

\n\n
    \n
  • TRACE – äußerst detaillierte Ablaufverfolgung (Funktionsein-/austritte, Variablenwerte). Nur zum Debuggen verwenden.
  • \n
  • DEBUG – Debug-Informationen, die dem Entwickler helfen (Objektzustände, Ergebnisse von Zwischenberechnungen).
  • \n
  • INFO – wichtige Ereignisse im Anwendungsablauf (Start, Stopp, erfolgreiche Verarbeitung einer Anfrage).
  • \n
  • WARN – potenzielle Probleme, die den Betrieb nicht beeinträchtigen (geringer Arbeitsspeicher, veraltete API).
  • \n
  • ERROR – Fehler, die ein Eingreifen erfordern, bei denen die Anwendung aber

Blogs

Buchempfehlungen