2016-11-30 1 views
1

私はブースト1.62を使用します。私はこの方法でログをブーストします:ブースト1.62 - ログv2、オープンモードがデータを追加するように設定されているとファイルの回転が機能しません

logging::add_file_log 
(
    keywords::file_name = "myfile.log", 
    keywords::rotation_size = 1024, 
    keywords::format = expr::stream 
    << "[" 
    << expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d, %H:%M:%S.%f") 
    << "] <" << expr::attr<severity_level>("Severity") 
    << "> " << expr::message 

); 

logging::add_common_attributes(); 

上記のコードローテーションはうまく動作しますが、プログラムが起動すると、最初からログファイルが作成されます。私が追加した場合:

keywords::open_mode = (std::ios::out | std::ios::app) 

add_file_logに新しいログが既存のログファイルに追加されますが、回転がを動作しません。私は回転された1つのログファイルが必要です。ファイルがすでに存在する場合は、新しいデータを追加する必要があります。それを修正するには?

答えて

0

ロガーを設定するときは、scan_matchingを使用する必要があります。例えば、

Boost::Log and log numbering

#define BOOST_LOG_DYN_LINK 1 
#include <boost/log/core.hpp> 
#include <boost/log/common.hpp> 
#include <boost/log/attributes.hpp> 
#include <boost/log/sinks.hpp> 
#include <boost/log/expressions.hpp> 
#include <boost/log/trivial.hpp> 
#include <boost/log/utility/setup/common_attributes.hpp> 
#include <boost/log/utility/setup/file.hpp> 
#include <string> 

void initLogging() 
{ 
    boost::log::add_common_attributes(); 
    auto core = boost::log::core::get(); 

    core->add_global_attribute("UTCTimeStamp",boost::log::attributes::utc_clock()); 

    auto x = boost::log::add_file_log(
      boost::log::keywords::file_name    = "Log_%3N.log", 
      boost::log::keywords::rotation_size   = 1 * 1024, // 1k 
      boost::log::keywords::target    = "Logs", 
      boost::log::keywords::min_free_space  = 30 * 1024 * 1024, 
      boost::log::keywords::max_size    = 20 * 1024, 
      boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(boost::gregorian::greg_day(31)), 
      boost::log::keywords::scan_method   = boost::log::sinks::file::scan_matching, 
      boost::log::keywords::format    = "%UTCTimeStamp% (%TimeStamp%) [%ThreadID%]: %Message%", 
      boost::log::keywords::auto_flush   = true 
     ); 

    //auto d = x->locked_backend()->scan_for_files(); 
} 

int main() 
{ 
    initLogging(); 
    for (int i = 0; i < 20; ++i) { 
     BOOST_LOG_TRIVIAL(trace) << "Let's go shopping " << std::string(400, '*'); 
    } 
} 
関連する問題