toge's diary

コンピュータ関連の趣味をつらつらと。

C++のロギングライブラリのメモ

昨年末の話になりますが、ぼーっとredditC++カテゴリを見ていたらlwlogというライブラリの話題が出てました。 「spdlogより速い」っていうのが売りのようです。確かに速そう。 www.reddit.com

ちょうど良いのでロギングライブラリの個人的なメモをしておこうと思います。

boost log

www.boost.org

C++の定番ライブラリboostのloggingライブラリです。 機能豊富ですが、残念ながら大分遅いです。 C++ 的に遅いのはかなり致命的だなぁと思うのであまり積極的には使いません。 boost以外使えない場合とかあるのでそういう時に重宝します。

spdlog

github.com

多分boost logを含めた昔からあるloggingライブラリを駆逐する高速処理のロギングライブラリでした。 今となってはもっと速いライブラリが出てきてしまったので、処理速度では残念な感じです。 ただ対応している出力先が豊富なので、巨大なシステムで、ログをどこかに飛ばすみたいな用途だとspdlogは便利かもしれません。

設定ファイルでsinkの構成を定義できる guangie88/spdlog_setup というライブラリがあるのが重宝します。 github.com

quill

github.com

私としては最近一番使っているロギングライブラリになります。

  • 最低限の機能がある
  • 簡単に使える
  • 高速に動作する
  • ログファイルがテキストで扱いやすい
  • Conanパッケージがある といったところが気に入ってます。

ログローテートなどはあまり凝ったことはできませんので、そういうのを求めるならspdlogなのかなぁと思います。

Nanolog

github.com

quillよりもちょっとだけ速いロギングライブラリ。 いろいろ野心的で、好奇心をくすぐられる部分も多いのですが、以下の点が個人的には大きなデメリットです。

  • Linuxのみに対応
  • ログファイルが独自バイナリで閲覧時に専用コマンドでテキスト化

quillよりも圧倒的に速いとかなら考えるのですが、ベンチマーク見ると10%も変わらないです。 今のところ積極的に使う理由が無いなぁと。

lwlog

github.com

期待の新星。 sinkの設定をcompile timeで構成できるのが速そう。

今のところVisual C++でのビルドが前提になってしまっているけれど、CMake対応してくれるみたいです。 手軽に使えるようになったら是非使ってみたい。