README.md

Logger

Небольшая C++ библиотека для логирования.

Сборка

mkdir build
cd build
cmake ..
cmake --build .

Использование


// Вывести в поток символов char сообщение уровня debug
log(debug) << "Это сообщение отобразится если текущий уровень логгирования debug или выше" << std::endl;
// Вывести в поток символов wchar_t сообщение уровня info
wlog(debug) << L"Это сообщение отобразится если текущий уровень логгирования info или выше" << std::endl;

// Поменять поток вывода (по умолчанию std::clog и std::wclog)
static std::wofstream wlog_file(/* путь до файла */, std::ios::truc | std::ios::out);
static std::ofstream  log_file(/* путь до файла */, std::ios::truc | std::ios::out);
logger::LogController::setWLogStream(wlog_file);
logger::LogController::setLogStream(log_file);
// ВАЖНО: logger::LogController не владеет потоками вывода, поэтому объекты потоков должны существовать 
//        на протяжении всего времени использования их в качестве лога, то есть либо пока их не поменяют
//        с помощю logger::LogController::setLogStream и logger::LogController::setWLogStream, либо до
//        конца работы программы, то есть лучше объявлять их как глобальные переменные.
//
// ДЛЯ ПОНИМАНИЯ: logger::LogController хранит указатели на std::ostream и std::wostream, а для каждого
//                потока создаёт отдельные std::osyncstream и std::wosyncstream в tls, через которые и
//                происходит вывод.

// Установить уровень логгирования на trace
logger::LogController::setLogLevel(logger::log_level_t::trace);

// RAII блокировка вывода
{
  auto out_lock = logger::LogController::getOutLog();

  log(debug) << "Сообщение которое пока-что не будет выведено" << std::endl;
  
  log(debug) << "И это тоже" << std::endl;

} // При выходе из области видимости (при вызове деструктора out_lock) все сообщения будут выведены

Конвейеры
0 успешных
0 с ошибкой