#include "glogger.hpp" #include // Создаем файлы для логов 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; }