如何使用boost.log以dec格式打印ProcessID和ThreadID

时间:2014-12-22 05:53:18

标签: c++ boost boost-log

我在程序中使用boost.log,默认格式化程序以十六进制格式输出ProcessID和ThreadID,任何人都知道如何以dec格式打印它们,谢谢。

这是我的代码的github:https://github.com/owenliang/boost_asio,谢谢。

  boost::log::formatter scope_formatter = boost::log::expressions::stream << "[" <<
      boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S") <<
      "] [" << boost::log::expressions::attr<boost::log::attributes::current_process_id::value_type>("ProcessID") << 
      "-" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "] [" <<
      boost::log::expressions::attr<boost::log::trivial::severity_level>("Severity") <<
      "] " << boost::log::expressions::format_named_scope("Scope", boost::log::keywords::format = "%c[%F:%l] ", 
        boost::log::keywords::depth = 1) << boost::log::expressions::smessage;

1 个答案:

答案 0 :(得分:6)

Boost Log提供线程和进程ID作为类类型。如果你想获得它们的积分值,你需要先得到它们的原生ID,如下所示:

#include <boost/phoenix.hpp>

/* Define place holder attributes */
BOOST_LOG_ATTRIBUTE_KEYWORD(process_id, "ProcessID", attrs::current_process_id::value_type )
BOOST_LOG_ATTRIBUTE_KEYWORD(thread_id, "ThreadID", attrs::current_thread_id::value_type )

// Get Process native ID
attrs::current_process_id::value_type::native_type get_native_process_id(
        logging::value_ref<attrs::current_process_id::value_type,
        tag::process_id> const& pid)
{
    if (pid)
        return pid->native_id();
    return 0;
}

// Get Thread native ID
attrs::current_thread_id::value_type::native_type get_native_thread_id(
        logging::value_ref<attrs::current_thread_id::value_type,
        tag::thread_id> const& tid)
{
    if (tid)
        return tid->native_id();
    return 0;
}

然后在你的set_formatter()中,例如:

   sink->set_formatter
        (
         expr::stream
         << boost::phoenix::bind(&get_native_process_id, process_id.or_none()) << ":"
         << boost::phoenix::bind(&get_native_thread_id, thread_id.or_none()) << ":"
         << "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y%m%d %H:%M:%S")
         << "]:*" << severity << "*:"
         << expr::smessage
        );

输出:

39157:140229314553664:[20170710 15:32:15]:*INF*:Log message