2017-03-22 9 views
0

私は、ロギング用のブースト設定ファイルを使用するには、次のコード行でログインするためのブースト1.63を使用しているため動作しません。 Boost log setup APIの理解から自分自身を救うことができます。設定ファイルの内容は次のとおりです:ブーストログ自動フラッシュはファイル

[Core] 
DisableLogging="false" 

[Sinks.SYSLF] 
Destination="TextFile" 
Asynchronous="true" 
AutoFlush="true" 
Format="[%TimeStamp(format=\"%Y-%m-%d %H:%M:%S.%f\")%][%Severity%] %Message%" 
Target="logs" 
FileName="dsmip_%N.log" 
RotationTimePoint="00:00:00" 
ScanForFiles="Matching" 
MaxSize="10000000" 
Filter="%Severity% >= info" 

[Sinks.Console] 
Destination="Console" 
AutoFlush="true" 
Format="[%TimeStamp(format=\"%Y-%m-%d %H:%M:%S.%f\")%][%Severity%] %Message%" 
Filter="%Severity% >= debug" 

私の問題はファイルに対しては機能しません。 stdoutではすべてのイベントを即座に取得しますが、アプリケーションを終了するとファイルが最初に書き込まれます。これはロギングのためにかなり恥ずかしいです...

最初に1.58を使用しましたが、状況は同じでした。何が間違っていますか?

ありがとうございます。 最高の:Balazs Bamer

+0

あなたが任意のコードを示していないので、それは何かを示唆することは困難です。 Boost.Logは、テストファイルシンクの 'AutoFlush'パラメータをサポートしています。私が見る限り、正しく設定されています。私が持っている1つのアイデアは、アプリケーションがすぐに終了し、シンクが非同期(非同期がtrueに設定されているため)であるため、専用の処理レコードスレッドは、プロセスが終了する前にログレコードを処理しません。フラッシュされる。実際にファイルをできるだけ早く保存したい場合は、非同期ロギングを避ける必要があります。 –

+0

あなたが正しいです、私はログの初期化に使用する小さな[クラス](https://github.com/oci-labs/BoostLog/)について言及していませんでした。私が使用するのは、設定ファイルからログを初期化することだけです。 しかし、私のプログラムは何時間も実行されており、すべてをロギングするのに十分な時間がありました。私はSIGTERMとSIGINTを捕まえて終了することを解決し、シャットダウン中にも最後のイベントが記録されます。 また、RotationIntervalを1分に設定しようとしました。こうすることで、実行時にもログファイルを完成させることができます。実際の解決策はありませんが、これを1時間に設定すると回避策になります。 –

答えて

0

Googleは私の友人だった、私は解決策を見つけたhere。 Boostは実際には、アプリケーションディレクトリにログファイルを作成し、クローズ時(ログが回転するかプログラムが存在する場合)にのみコピー先にコピーするように動作します。したがって、すべてのログファイルが特定のディレクトリに表示されるようにするには、ファイル名のパターンにというディレクトリ名と、ターゲットにというディレクトリ名を含める必要があります。

[Sinks.SYSLF] 
... 
Target="logs" 
FileName="logs/dsmip_%N.log" 

敬具:バラージュ

関連する問題