このページの内容

デフォルトでは、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));

注意: 定期フラッシュは別のスレッドから行われるため、スレッドセーフなロガーに対してのみ使用してください。