Last active
July 11, 2025 18:24
-
-
Save sunmeat/bc1eeeca55bffe6fd9c87dacbadb5528 to your computer and use it in GitHub Desktop.
console cpp app logger example with singleton patterns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <string> | |
| using namespace std; | |
| class Logger | |
| { | |
| static Logger* instance; // приватний статичний вказівник на єдиний екземпляр класу | |
| int log_count = 0; // скільки разів відбувся запис рядка у файл | |
| Logger() // конструктор - приватний (забороняє створювати об'єкти за межами класу) | |
| { | |
| } | |
| public: | |
| static Logger* GetInstance() // публічний статичний геттер для отримання адреси єдиного об'єкта | |
| { | |
| // якщо об'єкт журналу не існує - він створюється | |
| return instance == nullptr ? instance = new Logger() : instance; | |
| } | |
| void Write(string message) // записати в журнал рядок тексту | |
| { | |
| log_count++; | |
| cout << log_count << ": " << message << "\n"; | |
| // записати рядок у файл за допомогою fopen_s | |
| FILE* file; | |
| if (fopen_s(&file, "log.txt", "a") == 0 && file != nullptr) { | |
| fprintf(file, "%s\n", message.c_str()); | |
| fclose(file); | |
| } | |
| } | |
| void Write(int value) | |
| { | |
| Write(to_string(value)); | |
| } | |
| }; | |
| Logger* Logger::instance = nullptr; | |
| class HardProcessor | |
| { | |
| int start; | |
| public: | |
| HardProcessor(int start) | |
| { | |
| this->start = start; | |
| Logger::GetInstance()->Write("процесор було створено."); // логування початку роботи | |
| } | |
| int ProcessTo(int end) | |
| { | |
| int sum = 0; | |
| for (int i = start; i <= end; i++) { | |
| sum += i; | |
| Logger::GetInstance()->Write("виконується обчислення..."); | |
| Logger::GetInstance()->Write(i); | |
| } | |
| Logger::GetInstance()->Write("процесор щойно обчислив значення: "); | |
| Logger::GetInstance()->Write(sum); | |
| return sum; | |
| } | |
| }; | |
| class Program | |
| { | |
| public: | |
| static void DoHardWork() | |
| { | |
| auto logger = Logger::GetInstance(); | |
| HardProcessor processor(1); // початок діапазону | |
| logger->Write("розпочато складну обробку..."); // перший запис у журнал | |
| processor.ProcessTo(5); // кінець діапазону | |
| logger->Write("складна обробка завершена!"); // останній запис у журнал | |
| } | |
| }; | |
| int main() { | |
| setlocale(0, "Ukrainian"); | |
| Program::DoHardWork(); // виклик статичного методу (об'єкт тут не потрібен) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment