通常,如何在boost日志格式表达式上执行字符串操作?特别是,如何截断以小数秒结束的TimeStamp表达式,以便记录毫秒而不是微秒?
鉴于此片段,我如何记录,例如13:13:08.440而不是13:13:08.440736?
logging::add_file_log("xyz.log",
keywords::format = expr::stream
<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%T.%f")
);
我想做这样的事情:
<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%T.%.3f")
答案 0 :(得分:1)
目前Boost.Log中没有内置此功能。但是,您可以编写自己的格式化函数并将其设置为Boost.Log接收器的格式化程序。您可以创建一个将整个记录格式化的函数(例如,参见here),也可以只为特定属性定义operator<<
。 Here就是一个例子。另请注意,Boost.Log表达式基于Boost.Phoenix,因此在过滤器和格式化程序中使用Boost.Phoenix构造也是可能的。例如:
std::string my_formatter(logging::value_ref< boost::posix_time::ptime > const& timestamp)
{
if (timestamp)
{
// Format date/time here and return the result.
}
else
{
// The "TimeStamp" attribute value was not found or has unexpected type.
// Return a placeholder string.
}
}
logging::add_file_log("xyz.log",
keywords::format = expr::stream
<< boost::phoenix::bind(&my_formatter, expr::attr<boost::posix_time::ptime>("TimeStamp"))
);