2016-01-05 56 views
2

目前,我正在使用接收器将数据写入日志文件和标准输出。不幸的是,如果我重新启动应用程序,接收器不会将新条目附加到日志文件中。它覆盖了现有的数据。我的代码如下:如何设置open_mode为增强接收器(非全局)来追加

using text_sink = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>; 

Logger::Logger(const LoggerConfig& config):mLoggerConfig(config){ 

    sink = boost::make_shared<text_sink>(); 

    if(config.isLogToFile()){ 
     //sink for output to file 
     sink->locked_backend()->add_stream(
        boost::make_shared<std::ofstream>(mLoggerConfig.getFileName().c_str())); 
    }else{ 
     // create sink to stdout   
     sink->locked_backend()->add_stream(
        boost::shared_ptr<std::ostream>(&std::cout, empty_delete())); 
    }  

    sink->locked_backend()->auto_flush(true);  

    logging::formatter fmt = expr::stream 
      << expr::attr<boost::posix_time::ptime>("timeStamp") 
      << " " << severityAttr << ": " 
      << expr::smessage; 

    sink->set_formatter(fmt); 

    // register sink 
    logging::core::get()->add_sink(sink); 

    //sink will only fetch output for this file 
    sink->set_filter(expr::has_attr(tagAttr) && tagAttr == mLoggerConfig.getFileName()); 

    mLogger.add_attribute("fileName", attrs::constant<std::string>(mLoggerConfig.getFileName())); 
    mLogger.add_attribute("timeStamp", attrs::local_clock()); 

} 

我发现有 关键字open_mode应设置附加:

boost::log::add_file_log 
    (
     boost::log::keywords::file_name = "sample_%Y%m%d.log", 
     boost::log::keywords::auto_flush = true, 
     boost::log::keywords::open_mode = (std::ios::out | std::ios::app), //.... 

但没有任何人有一个想法如何设置关键字只是在我的构造函数中的接收器?因为我猜add_file_log会产生全球影响。

注意:我没有使用文件旋转功能。

回答

1

但有没有人有一个想法如何在我的构造函数中设置这个关键字?

不需要关键字,您可以将std::ios_base::openmode标志传递给std::ofstream构造函数。需要使用专门的text_file_backend,这本身管理文件流

//sink for output to file 
sink->locked_backend()->add_stream(boost::make_shared<std::ofstream>(
    mLoggerConfig.getFileName().c_str(), std::ios::out | std::ios::app)); 

的关键字。

因为我猜add_file_log会产生全局效应。

add_file_logconvenience function简单地创建并添加新的宿的核心。它使用text_file_backend来实现接收器。

+0

工作。谢谢 :) –