2017-07-16 8 views
0

ポスト初期化段階でブーストログのmax_sizeパラメータを設定しようとしています。 は、今まで私はこのような初期の段階でそれを設定することができました:初期化後のブーストログの設定max_size

logging::add_file_log(  
    keywords::auto_flush = true, 
    keywords::target =BOOST_LOG_FOLDER, 
    keywords::file_name =BOOST_LOG_FILE, 
    keywords::time_based_rotation = sinks::file::rotation_at_time_point(0,0,0), 
    keywords::rotation_size = 30 * 1024 * 1024, 
    keywords::max_size = 60 * 1024 * 1024, 
    ); 

今、私はこのコール(入力からの値に応じて)後のmax_sizeを変更したいです。

私はこれが

答えて

1

max_sizeパラメータを行うことができますどのように表示されていないが、対象ディレクトリ内で回転ファイルの最大合計サイズを指定します。これはコレクタパラメータなので、変更するには、add_file_logが返すファイルシンクに新しいコレクタを作成して設定する必要があります。

typedef sinks::synchronous_sink<sinks::text_file_backend> sink_t; 
boost::shared_ptr<sink_t> sink = logging::add_file_log(  
    keywords::auto_flush = true, 
    keywords::target =BOOST_LOG_FOLDER, 
    keywords::file_name =BOOST_LOG_FILE, 
    keywords::time_based_rotation = sinks::file::rotation_at_time_point(0,0,0), 
    keywords::rotation_size = 30 * 1024 * 1024, 
    keywords::max_size = 60 * 1024 * 1024, 
); 

sink->locked_backend()->set_file_collector(
    sinks::file::make_collector(
     keywords::target =BOOST_LOG_FOLDER, 
     keywords::max_size = 30 * 1024 * 1024 
    ) 
); 

ただし、ライブラリではこのように制限を減らすことができます。これは、ターゲットディレクトリごとに1つのコレクタインスタンスしかないため、複数のシンクがファイルを同じディレクトリにローテーションする場合でも、ディレクトリの制限がアプリケーション全体で広く維持されるためです。 make_collectorは、指定されたターゲットディレクトリに設定されている現在の制限を検証し、最も制限の厳しい制限を設定します。max_sizeは最小許容値を選ぶことを意味します。

関連する問題