|
|
#include "glogger.hpp"
|
|
|
#include <thread>
|
|
|
|
|
|
// Создаем файлы для логов
|
|
|
std::ofstream network_log_file("network.log");
|
|
|
std::ofstream critical_errors_file("critical.log");
|
|
|
|
|
|
int main() {
|
|
|
// --- Настраиваем сложную маршрутизацию ---
|
|
|
|
|
|
// 1. По умолчанию все логи идут в стандартный вывод (консоль)
|
|
|
DaemonLogger::setGlobalOutputStream(std::cout);
|
|
|
|
|
|
// 2. Все логи категории "Database", кроме ошибок, идут в /dev/null (игнорируются)
|
|
|
// Для этого создадим "пустой" поток
|
|
|
std::ofstream null_stream;
|
|
|
null_stream.setstate(std::ios_base::badbit); // Делаем поток невалидным
|
|
|
DaemonLogger::setCategoryOutputStream("Database", null_stream);
|
|
|
|
|
|
// 3. Все логи категории "Network" идут в свой файл network.log
|
|
|
DaemonLogger::setCategoryOutputStream("Network", network_log_file);
|
|
|
|
|
|
// 4. Но ОШИБКИ из "Network" И ОШИБКИ из "Database" идут в специальный файл critical.log
|
|
|
DaemonLogger::setSeverityOutputStream("Network", DaemonLogger::Severity::Error, critical_errors_file);
|
|
|
DaemonLogger::setSeverityOutputStream("Database", DaemonLogger::Severity::Error, critical_errors_file);
|
|
|
|
|
|
// --- Начинаем логирование ---
|
|
|
|
|
|
LOG_INFO("Main", "Система логирования настроена. Запускаем приложение.");
|
|
|
|
|
|
// Логирование из разных категорий
|
|
|
LOG_DEBUG("Network", "Инициализация сетевого стека..."); // Пойдет в network.log
|
|
|
LOG_INFO("Network", "Соединение с %1% установлено.", "192.168.1.1"); // Пойдет в network.log
|
|
|
|
|
|
LOG_INFO("Database", "Подключение к базе данных..."); // Пойдет в null_stream (никуда)
|
|
|
LOG_WARNING("Database", "Медленный запрос обнаружен."); // Пойдет в null_stream (никуда)
|
|
|
|
|
|
LOG_ERROR("Network", "Таймаут соединения с хостом %1%", "example.com"); // Пойдет в critical.log
|
|
|
LOG_ERROR("Database", "Не удалось выполнить транзакцию."); // Пойдет в critical.log
|
|
|
|
|
|
LOG_INFO("Scheduler", "Задача #%1% выполнена.", 123); // Правил нет, пойдет в std::cout
|
|
|
LOG_ERROR("Scheduler", "Не удалось запустить задачу."); // Правил нет, пойдет в std::cout
|
|
|
|
|
|
// Установка минимального уровня для категории
|
|
|
DaemonLogger::get("Network").setMinSeverity(DaemonLogger::Severity::Warning);
|
|
|
LOG_INFO("Network", "Эта информация больше не будет записана."); // Не пройдет из-за min_severity
|
|
|
|
|
|
return 0;
|
|
|
}
|