2014-11-19 6 views
3

Мне нужно активировать журнал после выполнения каждой строки кода ведения журнала. Возможно ли каким-то образом настроить приемник таким образом? В настоящее время журнал заполняется сразу после завершения программы.Boost logger flush to file

#include <boost/log/core.hpp> 
#include <boost/log/trivial.hpp> 
#include <boost/log/expressions.hpp> 
#include <boost/log/sinks/text_file_backend.hpp> 
#include <boost/log/utility/setup/file.hpp> 
#include <boost/log/utility/setup/common_attributes.hpp> 
#include <boost/log/sources/severity_logger.hpp> 
#include <boost/log/sources/record_ostream.hpp> 
#include <conio.h>; 

namespace logging = boost::log; 
namespace src = boost::log::sources; 
namespace sinks = boost::log::sinks; 
namespace keywords = boost::log::keywords; 

void init() 
{ 
    logging::add_file_log 
    (
     keywords::file_name = "sample_%N.log",          /*< file name pattern >*/ 
     keywords::rotation_size = 10 * 1024 * 1024,         /*< rotate files every 10 MiB... >*/ 
     keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), /*< ...or at midnight >*/ 
     keywords::format = "[%TimeStamp%]: %Message%"         /*< log record format >*/ 
    ); 

    logging::core::get()->set_filter 
    (
     logging::trivial::severity >= logging::trivial::info 
    ); 
    logging::core::get(); 
} 
//] 

#endif 

int main(int, char*[]) 
{ 
    init(); 
    logging::add_common_attributes(); 

    using namespace logging::trivial; 
    src::severity_logger<severity_level> lg; 

    BOOST_LOG_SEV(lg, trace) << "A trace severity message"; 
    BOOST_LOG_SEV(lg, debug) << "A debug severity message"; 
    BOOST_LOG_SEV(lg, info) << "An informational severity message"; 
    BOOST_LOG_SEV(lg, warning) << "A warning severity message"; 
    BOOST_LOG_SEV(lg, error) << "An error severity message"; 
    BOOST_LOG_SEV(lg, fatal) << "A fatal severity message"; 
    std::cin.get(); 
    return 0; 
} 
+1

Как насчет [auto_flush] (HTTP: //boost-log.sourceforge .net/ЛИЭС/журнал/DOC/HTML/журнал/подробный/sink_backends.html)? – Lemming

ответ

6

Как комментатор сказал, просто добавьте auto_flush ключевое слово:

logging::add_file_log 
(
    keywords::file_name = "sample_%N.log",          /* file name pattern   */ 
    keywords::rotation_size = 10 * 1024 * 1024,         /* rotate files every 10 MiB... */ 
    keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), /* ...or at midnight   */ 
    keywords::auto_flush = true, 
    keywords::format = "[%TimeStamp%]: %Message%"         /* log record format   */ 
); 

Live On Coliru