logo

Système de journalisation en C++

Le système de journalisation est un composant très critique pour suivre le comportement de l'application, détecter les problèmes et comprendre les performances du système. Nous pouvons créer un système de journalisation simple et très efficace en C++ pour capturer et enregistrer divers événements et données qui se produisent lors de l'exécution d'un programme.



Considération de conception pour un système de journalisation

Un système de journalisation de base doit inclure les fonctionnalités suivantes pour mettre en œuvre un système de journalisation :

  • Niveaux de journalisation : utilisez différents niveaux de journalisation pour regrouper les communications en fonction de leur importance ou de leur gravité. Les niveaux de journalisation DEBUG, INFO, ATTENTION, ERREUR et CRITIQUE sont souvent visibles.
  • Destinations finales : Permettez aux utilisateurs de choisir la destination des messages de journal avec flexibilité. Les fichiers journaux, la sortie de la console et les services externes en sont des exemples.
  • Contexte et horodatages : Pour donner aux entrées du journal un contexte chronologique, fournissez des horodatages. Vous pouvez simplement choisir de fournir un contexte supplémentaire en incluant des noms de fichiers, des numéros de ligne ou des noms de fonctions.
  • Installation : Donnez aux développeurs la possibilité de personnaliser dynamiquement le système de journalisation afin qu'ils puissent modifier les destinations ou les niveaux de reporting sans avoir à modifier le code.

Implémentation d'un système de journalisation simple en C++

Le programme ci-dessous implémente un système de journalisation en C++.

C++








// C++ program to implement a basic logging system.> > #include> #include> #include> #include> using> namespace> std;> > // Enum to represent log levels> enum> LogLevel { DEBUG, INFO, WARNING, ERROR, CRITICAL };> > class> Logger {> public>:> >// Constructor: Opens the log file in append mode> >Logger(>const> string& filename)> >{> >logFile.open(filename, ios::app);> >if> (!logFile.is_open()) {> >cerr <<>'Error opening log file.'> << endl;> >}> >}> > >// Destructor: Closes the log file> >~Logger() { logFile.close(); }> > >// Logs a message with a given log level> >void> log>(LogLevel level,>const> string& message)> >{> >// Get current timestamp> >time_t> now =>time>(0);> >tm>* timeinfo =>localtime>(&now);> >char> timestamp[20];> >strftime>(timestamp,>sizeof>(timestamp),> >'%Y-%m-%d %H:%M:%S'>, timeinfo);> > >// Create log entry> >ostringstream logEntry;> >logEntry <<>'['> << timestamp <<>'] '> ><< levelToString(level) <<>': '> << message> ><< endl;> > >// Output to console> >cout << logEntry.str();> > >// Output to log file> >if> (logFile.is_open()) {> >logFile << logEntry.str();> >logFile> >.flush();>// Ensure immediate write to file> >}> >}> > private>:> >ofstream logFile;>// File stream for the log file> > >// Converts log level to a string for output> >string levelToString(LogLevel level)> >{> >switch> (level) {> >case> DEBUG:> >return> 'DEBUG'>;> >case> INFO:> >return> 'INFO'>;> >case> WARNING:> >return> 'WARNING'>;> >case> ERROR:> >return> 'ERROR'>;> >case> CRITICAL:> >return> 'CRITICAL'>;> >default>:> >return> 'UNKNOWN'>;> >}> >}> };> > int> main()> {> >Logger logger(>'logfile.txt'>);>// Create logger instance> > >// Example usage of the logger> >logger.>log>(INFO,>'Program started.'>);> >logger.>log>(DEBUG,>'Debugging information.'>);> >logger.>log>(ERROR,>'An error occurred.'>);> > >return> 0;> }>

>

>

Sortir

[2024-01-22 10:49:14] INFO: Program started. [2024-01-22 10:49:14] DEBUG: Debugging information. [2024-01-22 10:49:14] ERROR: An error occurred.>

Avantages de la connexion à la programmation

Un élément clé du développement logiciel est la journalisation, qui suit les données sur l’exécution d’un programme. Il remplit plusieurs fonctions, telles que :

  1. Débogage : la journalisation aide à identifier et à diagnostiquer les problèmes dans le code car elle offre un aperçu du flux d'exécution et des valeurs des variables à différentes étapes.
  2. Surveillance: les journaux sont très utiles pour suivre les problèmes, surveiller le comportement du programme et localiser les goulots d'étranglement des performances.
  3. Audit : En conservant un enregistrement des événements remarquables, des actions des utilisateurs ou de l'activité du système, la journalisation facilite l'audit et la conformité.
  4. Dépannage: Lorsque les utilisateurs rencontrent des difficultés, les journaux peuvent fournir des informations importantes pour identifier et résoudre les problèmes.