Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active July 11, 2025 18:24
Show Gist options
  • Save sunmeat/bc1eeeca55bffe6fd9c87dacbadb5528 to your computer and use it in GitHub Desktop.
Save sunmeat/bc1eeeca55bffe6fd9c87dacbadb5528 to your computer and use it in GitHub Desktop.
console cpp app logger example with singleton patterns
#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