Transmitir um impulso :: log :: expressões :: attr <std :: string> para std :: string
Enquanto uso o Boost.Log, estou tentando manter meuTimeStamp
formatador como:
logging::add_file_log
(
keywords::file_name = "my.log",
keywords::format =
(
expr::stream
<< expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
<< "," << expr::attr< int >("Line")
<< " " << expr::attr< std::string >("File")
<< " " << logging::trivial::severity
<< " - " << expr::smessage
)
);
Dizem que não posso usar a outra forma de formatador, pois terei muitas dificuldades em"TimeStamp"
no meu formato personalizado:
static void my_formatter(logging::record_view const& rec, logging::formatting_ostream& strm)
{
strm << logging::extract< boost::posix_time::ptime >("TimeStamp", rec);
irá produzir algo como:2015-Jul-01 16:06:31.514053
, enquanto eu estou interessado apenas em:"%Y-%m-%d %H:%M:%S"
. No entanto, a primeira forma é extremamente difícil de usar, por exemplo, não consigo transmitir umexpr::attr< std::string >
para um simplesstd::string
por exemplo:
logging::add_file_log
(
keywords::file_name = "my.log",
keywords::format =
(
expr::stream
<< expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
<< "," << expr::attr< int >("Line")
<< " " << boost::filesystem::path(expr::attr< std::string >("File"))
.filename().string()
<< " " << logging::trivial::severity
<< " - " << expr::smessage
)
);
O código acima nem compila.
Existe uma maneira fácil de imprimirTimeStamp
usando meu formato personalizado e, ao mesmo tempo, usar uma conversão personalizada para string para poder usarboost::filesystem::path::filename()
?