2015-02-06 86 views
2

當我設置格式PARAMS的代碼,日期格式輸出時間我可以使用這樣的事情升壓日誌格式單一屬性與記錄:: init_from_stream

logging::formatter simpleFormat(expr::format("%1% %2%") % 
    expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%H:%M:%S") % 
    expr::smessage 
); 

但是,當我初始化記錄器,帶有一個配置文件,我只能在屬性位置表示法中指定格式,而不是格式細節。

所以,這條線在升壓日誌配置文件

Format="[%TimeStamp%]: %Message%" 

產生輸出:

[2015-Feb-06 09:32:27.401496]: blah blah blah 

我想減少時間戳像這樣

[06.02.2015 09:32:27] 

怎樣纔在boost日誌配置文件中描述,它根本不能完成?

回答

4

序言

我的回答是有效提升1.55(未與最新的一個測試)。而且它僅在MSVC 2013編譯器中進行過測試。

回答

看起來像你需要定製formatter_factoryTimeStamp屬性可以指定它的格式。這個工作對我來說:

#include <fstream> 
#include "boost/shared_ptr.hpp" 
#include "boost/log/trivial.hpp" 
#include "boost/log/expressions.hpp" 
#include "boost/log/utility/setup.hpp" 
#include "boost/log/support/date_time.hpp" 

class timestamp_formatter_factory : 
    public boost::log::basic_formatter_factory<char, boost::posix_time::ptime> 
{ 
    public: 
     formatter_type create_formatter(boost::log::attribute_name const& name, args_map const& args) 
     { 
      args_map::const_iterator it = args.find("format"); 
      if (it != args.end()) 
       return boost::log::expressions::stream << boost::log::expressions::format_date_time<boost::posix_time::ptime>(boost::log::expressions::attr<boost::posix_time::ptime>(name), it->second); 
      else 
       return boost::log::expressions::stream << boost::log::expressions::attr<boost::posix_time::ptime>(name); 
     } 
}; 

int main() 
{ 
    // Initializing logging 
    boost::log::register_formatter_factory("TimeStamp", boost::make_shared<timestamp_formatter_factory>()); 
    boost::log::add_common_attributes(); 
    std::ifstream file("settings.ini"); 
    boost::log::init_from_stream(file); 
    // Testing 
    BOOST_LOG_TRIVIAL(info) << "Test"; 
    return 0; 
} 

而現在你的設置文件,你可以指定format論據TimeStamp屬性。像這樣:

[Sinks.ConsoleOut] 
Destination=Console 
AutoFlush=true 
Format="[%TimeStamp(format=\"%Y.%m.%d %H:%M:%S\")%]: %Message%" 
+0

Ty,看起來很棒,今天我已經完成了我的工作,星期一我會試一試。 – 2015-02-06 13:08:03

+0

不客氣=) – 2015-02-06 13:09:13

1

您應該能夠使用set_formatter作爲記錄here

sink->set_formatter 
(
    expr::stream << expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S") 
);