4 дня назад
История
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 с ошибкой