6

出力ログ メッセージを色分けするためにカスタムboost::logフォーマッタを使用していますが、 TimeStampおよびThreadID属性をログに追加する適切な方法が見つかりません。ファイルロギングを使用しているときは、パラメーターkeywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%"として書き込むだけです。logging::add_file_log次のカスタム フォーマッタで同様の効果を得たいと考えています。

void coloring_formatter(const logging::record_view& record,
                        logging::formatting_ostream& stream)
{
  auto severity = record[logging::trivial::severity];
  assert(severity);

  stream << "\e[1m";

  switch (severity.get())
  {
  case logging::trivial::severity_level::trace:
    stream << "\e[97m";
    break;
  case logging::trivial::severity_level::debug:
    stream << "\e[34m";
    break;
  case logging::trivial::severity_level::info:
    stream << "\e[32m";
    break;
  case logging::trivial::severity_level::warning:
    stream << "\e[93m";
    break;
  case logging::trivial::severity_level::error:
    stream << "\e[91m";
    break;
  case logging::trivial::severity_level::fatal:
    stream << "\e[41m";
    break;
  }

  stream // << output TimeStamp
         // << output ThreadID
         << "[" << severity << "] "
         << record[logging::expressions::smessage]
         << "\e[0m";
}
4

1 に答える 1

5

これらの属性をログ レコードに追加した場合、それらを抽出する方法は複数あります。最も簡単な方法は、キーワードを使用することです。まず、属性のキーワードを宣言します。

BOOST_LOG_ATTRIBUTE_KEYWORD(a_timestamp, "TimeStamp", attrs::local_clock::value_type)
BOOST_LOG_ATTRIBUTE_KEYWORD(a_thread_id, "ThreadID", attrs::current_thread_id::value_type)

3 番目のパラメーターは、対応する属性の値の型であることに注意してください。この例では、使用した属性が と であると仮定しましlocal_clockcurrent_thread_id

これらのキーワードを使用して、ログ レコードから値を抽出できるようになりました。

stream << record[a_timestamp] << " "
       << record[a_thread_id]
       << " [" << severity << "] "
       << record[logging::expressions::smessage]
       << "\e[0m";
于 2016-07-28T11:03:16.533 に答える