You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.9 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}