boost::log::expressions::format_date_time
не является функцией форматирования даты и времени. Это генератор форматирования для использования в выражениях лямбда-форматирования. Другими словами, format_date_time
создает средство форматирования (объект функции с заданной c подписью), которое после вызова извлекает значение атрибута из записи журнала и форматирует его.
Вам следует либо используйте лямбда-выражения для создания средства форматирования вместо функции my_formatter
, в этом случае вы можете использовать format_date_time
или использовать один из традиционных методов форматирования даты и времени, например strftime
или Boost.DateTime IO .
Пример использования лямбда-выражений:
namespace expr = boost::log::expressions;
sink->set_formatter
(
expr::stream
<< "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S") << "]"
<< "[" << boost::log::trivial::severity << "] "
<< expr::smessage
);
Пример использования strftime
:
auto my_formatter = [](boost::log::record_view const& rec, boost::log::formatting_ostream& strm)
{
if (auto timestamp = boost::log::extract< boost::posix_time::ptime >("TimeStamp", rec))
{
std::tm ts = boost::posix_time::to_tm(*timestamp);
char buf[128];
if (std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &ts) > 0)
strm << "[" << buf << "]";
}
strm << "[" << rec[boost::log::trivial::severity] << "] ";
strm << rec[boost::log::expressions::smessage];
};