Cast a boost :: log :: expressions :: attr <std :: string> to std :: string

Während ich Boost.Log benutze, versuche ich mein @ zu behaltTimeStamp Formatierer wie:

  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
     )
    );

s wird gesagt, dass ich die andere Form des Formatierers nicht verwenden kann, da ich große Schwierigkeiten haben werde, mich zu drehe"TimeStamp" in mein benutzerdefiniertes Format:

static void my_formatter(logging::record_view const& rec, logging::formatting_ostream& strm)
{
  strm << logging::extract< boost::posix_time::ptime >("TimeStamp", rec);

wird so etwas ausgeben wie:2015-Jul-01 16:06:31.514053, während mich nur interessiert:"%Y-%m-%d %H:%M:%S". Die erste Form ist jedoch extrem schwer zu benutzen, zum Beispiel kann ich keinexpr::attr< std::string > zu einem einfachenstd::string zum Beispiel

  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
     )
    );

Der obige Code wird nicht kompiliert.

ibt es eine einfache Möglichkeit, beide zu druckeTimeStamp Ich verwende mein benutzerdefiniertes Format und verwende gleichzeitig eine benutzerdefinierte Zeichenfolge, um @ verwenden zu könneboost::filesystem::path::filename() ?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage