logo

Registravimo sistema C++

Registravimo sistema yra labai svarbus komponentas norint sekti, kaip programa veikia, rasti problemas ir suprasti sistemos veikimą. Galime sukurti paprastą ir labai veiksmingą registravimo sistemą C++ kalba, kad būtų galima užfiksuoti ir įrašyti įvairius įvykius ir duomenis, kurie atsiranda vykdant programą.



Svarstymas dėl registravimo sistemos projektavimo

Pagrindinė registravimo sistema turėtų apimti šias funkcijas, kad būtų galima įdiegti registravimo sistemą:

  • Registravimo lygiai : naudokite įvairius žurnalo lygius, kad sugrupuotumėte ryšius pagal jų svarbą ar rimtumą. Dažnai matomi žurnalo lygiai DEBUG, INFO, WARNING, ERROR ir CRITICAL.
  • Galutinės paskirties vietos : leiskite vartotojams lanksčiai pasirinkti žurnalo pranešimų paskirties vietą. Žurnalo failai, konsolės išvestis ir išorinės paslaugos yra to pavyzdžiai.
  • Kontekstas ir laiko žymos : norėdami suteikti žurnalo įrašams chronologinį kontekstą, pateikite laiko žymes. Galite tiesiog pasirinkti pateikti papildomą kontekstą įtraukdami failų pavadinimus, eilučių numerius arba funkcijų pavadinimus.
  • Sąranka : Suteikite kūrėjams galimybę dinamiškai tinkinti registravimo sistemą, kad jie galėtų keisti paskirties vietas arba ataskaitų lygius nekeisdami kodo.

Paprastos registravimo sistemos įdiegimas C++

Žemiau pateikta programa įgyvendina registravimo sistemą 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;> }>

>

>

Išvestis

[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.>

Prisijungimo prie programavimo privalumai

Pagrindinis programinės įrangos kūrimo komponentas yra registravimas, kuris seka duomenis apie programos vykdymą. Jis atlieka keletą funkcijų, tokių kaip:

  1. Derinimas: registravimas padeda identifikuoti ir diagnozuoti kode esančias problemas, nes suteikia įžvalgų apie vykdymo eigą ir kintamąsias reikšmes įvairiuose etapuose.
  2. Stebėjimas: žurnalai yra labai naudingi norint sekti problemas, stebėti programos elgseną ir rasti našumo kliūtis.
  3. Auditas: Tvarkant reikšmingų įvykių, vartotojo veiksmų ar sistemos veiklos įrašus, registravimas palengvina auditą ir atitiktį.
  4. Problemų sprendimas: Kai naudotojai susiduria su sunkumais, žurnalai gali suteikti svarbios informacijos, padedančios nustatyti ir išspręsti problemas.