2017-11-21 4 views
0

私はアプリケーションでBoost 1.63.0 Logライブラリを使用しています。さまざまなログファイルを初期化するために、私はboost::log::init_from_stream(...)メソッドを使用して、構成INIファイルからシンクを構成しています。boost :: log設定ファイルの変数を使用する

私はもともとブーストログのファイルローテーション動作に問題がありました。ファイルは現在の作業ディレクトリに作成され、ファイル回転トリガまたはアプリケーション終了の "Target"ディレクトリに移動されました。目的の動作は、ファイルが "Target"ディレクトリに直接作成されることでした。私はこの投稿の助けを借りてこれを修正しました:boost::log add_file_log not writing if app exits with CTRL_CLOSE_EVENT

要するに、「FileName」キーワードには名前だけでなく完全なパス情報も提供されています。これは動作しますが、設定ファイルを "クリーンアップ"する良い方法があるかどうかは疑問でした。たとえば、INIファイルには、現在のような「ターゲット」と「ファイル名」のキーワードの両方を指定することができ

が必要です。

Target="C:\\ProgramData\\MyApplication\\Logs" 
FileName="C:\\ProgramData\\MyApplication\\Logs\\AppLog_%N.log" 

唯一の「ターゲット」を指定できるようにするには本当にいいだろうその変数を "FileName"変数定義で使用します。これにより、将来の変更は、1つのことを変更するだけで、ずっと簡単になります。何かのように:

#Define Target Directory for file rotation 
Target="C:\\ProgramData\\MyApplication\\Logs" 

#Define File Name pattern 
FileName="%Target%\\AppLog_%N.log" 
    --- OR --- 
FileName="$(Target)\\AppLog_%N.log" 

これは可能ですか?

答えて

1

Boost.Logは可変拡大を実行しません。これを自分で行う必要があります。設定ファイルをsettingsにロードするには、parse_settingsを呼び出します。その後、そのコンテナを操作して変数を展開することができます。完了したら、init_from_settingsを呼び出してログライブラリを初期化することができます。

関連する問題