Как обрезать выражение формата журнала повышения

В общем, как я могу выполнять манипуляции со строками в выражениях формата журнала повышения? в частности, как я могу обрезать выражение 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")

person plong    schedule 09.01.2015    source источник
comment
Вы когда-нибудь догадывались об этом? Я в той же лодке.   -  person Kurt    schedule 20.03.2015
comment
Неа. Я просто живу микросекундами.   -  person plong    schedule 23.03.2015


Ответы (1)


В настоящее время в Boost.Log нет встроенной такой функции. Однако вы можете написать свою собственную функцию форматирования и установить ее в качестве средства форматирования для приемника Boost.Log. Вы можете создать функцию, которая будет форматировать всю запись (см. здесь, например) или просто определите operator<< для определенного атрибута. Вот пример. Также обратите внимание, что выражения 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"))
);
person Andrey Semashev    schedule 30.03.2015
comment
Для получения дополнительной информации о создании пользовательских средств форматирования см. этот вопрос SO (и его ответ ). - person Christian Severin; 14.11.2018