カスタム ストリーム バッファを記述する必要はありません。最も単純で直接的な方法は、テンプレート化された単一の引数 operator<<() を指定して、出力を送信できるクラスを作成することです。
template <typename T>
std::ostream& operator<<(const T& data_)
{
m_outstream << m_severity << "\t" << getTimeStamp() << "\t" << data_;
return m_outstream;
}
m_outstream は、何らかのタイプの std::ostream (std::ofstream など) です。m_severity と getTimeStamp() は、挿入できるものの例です (そして、重大度の種類をフォーマットして ostream に出力するために、bog 標準の 2 つの引数 operator<<() を作成できます)。
これにより、次のようなことができます。
myLogger << "failingFunction(" << argument <<
"): Could not do something." << std::endl;
m_outstream で次のような出力が得られます。
WARNING 2012-01-03 19:32 failingFunction("引数値"): 何かを実行できませんでした。
これを超えて、重大度を設定する方法が必要になります。これは、テンプレート化された operator<<() を追加したロガー クラスで呼び出されるメソッドと同じくらい簡単です。本当に凝ったものにしたい場合は、setw() が std::ostream で行うのと同じように動作する独自のマニピュレータを作成できます。マニピュレータの作成に関する入門書については、http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htmを参照してください。