2015-02-06 78 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") 
);