デフォルトでは、spdlogは良好な性能を得るため、基盤となるlibcの判断にフラッシュのタイミングを任せます。次の方法で、この動作を変更できます。
手動フラッシュ
logger->flush() 関数を使うと、ロガーに内容のフラッシュを指示できます。ロガーは、基盤となる各sinkの flush() 関数を呼び出します。
注意: 非同期ロガーの場合、logger->flush() はフラッシュ操作を要求するメッセージをキューへ送り、すぐに戻ります。この動作は、メッセージが受信されてフラッシュが完了するまで同期的に待っていた、spdlogの一部の旧版とは異なります。現在は、終了前に logger->flush() や spdlog::shutdown() を明示的に呼び出す必要はありません。プログラムの終了に伴う破棄時に、自動的に行われます。ただし、abort() や _exit(-1) のように「即座に」終了する関数の前に、すべての非同期ロガーを手動でフラッシュしたい場合は、それらの関数の前に spdlog::shutdown() を呼び出してください。
重大度に基づくフラッシュ
自動フラッシュを引き起こす最小ログレベルを設定できます。
たとえば、次の設定では、エラーまたはそれより重大なメッセージが記録されるたびにフラッシュします。
my_logger->flush_on(spdlog::level::err); 時間間隔に基づくフラッシュ
spdlogでは、フラッシュの間隔を設定できます。単一のワーカースレッドが、各ロガーのflush()を定期的に呼び出すことで実装しています。
たとえば、登録済みのすべてのロガーについて、5秒間隔の定期フラッシュを有効にします。
spdlog::flush_every(std::chrono::seconds(5));注意: 定期フラッシュは別のスレッドから行われるため、スレッドセーフなロガーに対してのみ使用してください。
©gabime 2023-2024 spdlog. All Rights Reserved.