Я бы подражал широко распространенному BOOST_LOG_TRIVIAL
с пользовательским определением, которое вместо этого использует std::cout
.
// Building with
// g++ -std=c++14 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c log.cpp
// g++ log.o -lpthread -lboost_log -lboost_log_setup -lboost_system -lboost_thread -o bl
#define FORBID_BOOST_LOG
#define VALUE_TO_STRING(x) #x
#ifdef FORBID_BOOST_LOG
#include <iostream>
#define LOG(sev) std::cout << "[" << VALUE_TO_STRING(sev) << "] "
#else
#include <boost/log/trivial.hpp>
#define LOG(sev) BOOST_LOG_TRIVIAL(sev)
#endif
int main()
{
LOG(info) << "hello logging";
}
Что приятно, но единственная функция, отсутствующая здесь, это хороший трейлинг-символ новой строки, добавленный тривиальное ведение журнала буста.
Я прочитал несколько заголовков буста, но на самом деле не имею представления о правильном синтаксисе препроцессора для поддержки сотен LOG(sev)
вызовов agnosti c о выбранной реализации препроцессора.