パトリック・ベルトーニ:
私は広範囲に模倣したい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";
}
これはいいですが、素敵な末尾の改行文字は、ブースト些細な伐採によって追加したことを、ここに唯一欠けている機能。
私はいくつかのブーストヘッダを越え読み、実際のmantain百正しいプリプロセッサ構文について見当がつかないましLOG(sev)
プリプロセッサ選択実装についてとらわれない呼び出し。
アランBirtles:
一つの解決策は、破壊に改行を出力するログオブジェクトを作成することです。あなたは、ログメッセージの最後に新しい行を取得しますので、オブジェクトが(これはブーストログがあまりにもどのように動作するかおそらく)ログ式の終わりに破壊されます。
#include <iostream>
struct Log
{
Log(const char* sev)
{
std::cout << "[" << VALUE_TO_STRING(sev) << "] ";
}
~Log()
{
std::cout << "\n";
}
template < typename T >
Log& operator <<(const T& value)
{
std::cout << value;
return *this;
}
};
#define LOG(sev) Log(VALUE_TO_STRING(sev))