雑多に技術メモと他色々

主に自分用な技術メモが多くなる気がする。他色々が書かれるかどうかは不明。

Netflix製ロギングFWのblitz4jを使うべきか

SLF4jのユニットテストいい感じに書けないのかなーとネットサーフィンしてて引っかかってしまった情報。
ソースそのままでLog4jからSLF4J&Logbackに移行する方法 - 夢とガラクタの集積場
こちらのページで、下記ようにNetflixがロギングフレームワークをアナウンスしたって情報が出てる。

と思っていたら、Blitz4jなる高パフォーマンスなロギングフレームワーク
Netflixからアナウンスされました。

なんとなくNetflixという単語だけで飛びついてしまったけどどうなのか。

結論

2019年時点ではLogbackやLog4j2の方が主流の認識。
でも調べた限りのパフォーマンス比較だとBlitz4jの方が早いケースはあるかもしれない。

調査情報

NetflixLogback使えるならそれでいいんじゃね?と言ってる

Announcing Blitz4j — a scalable logging framework – Netflix TechBlog – Medium
上記Netflixのアナウンス見た限り下記のような感じで書かれているように見受けられた。(超意訳)

  • Log4jの同期でパフォーマンスネックになるところがきつい。
  • 必要なところ以外は同期外してパフォーマンスが出るようにしてみた。
  • Log4jと比較してロギングの正確さよりもパフォーマンスを重きを置いている。
  • LogBackじゃない理由?使えるならそっちでいいんじゃね。既存プロジェクトから移行するのは結構手間みたいよ。
  • 俺らは移行にかかる手間とのトレードオフで考えて自作したほうがいいって判断した。

Netflix自身もLogBackよりもこっち、というほどは推していないようである。
移植性はアナウンス時点でLog4j2.xの正式リリースはなかったから、移植性などもそっちとの比較にはなってない気がする。

コミュニティの活発さ

一応github見て最近のプルリクマージ数なんかで比較してみた。
Pulse · Netflix/blitz4j · GitHub
Pulse · qos-ch/logback · GitHub
Pulse · apache/logging-log4j2 · GitHub
メンテ頻度が高けりゃいいってもんでもないけど、執筆時点ではLog4j2 > Logback > blitz4jという感じ。
blitz4jの活発度は他のライブラリよりは劣る認識。

性能の比較

Log4j(2) vs Logbackあたりなら比較したよってページもあるけど、Blitz4jも基準合わせて比較してみないといけないのでよくわからない。
あと公式はどうしても自身のライブラリが高パフォーマンスになるように基準切ると思うので…
Log4jの公式パフォーマンス比較なんかだとLogbackのdisが激しいように見える。

ただ、下記のことから主流ライブラリよりもBlitz4jの方がパフォーマンスが出ている可能性は否定できない。

  • Netflixのアナウンスに書いてあるblitz4jのパフォーマンス比較ではLog4j(1.x)が3倍以上遅いとのこと。
  • 比較基準は違うとしても、Logback/Log4j2が性能3倍と見受けられるベンチマークはググった限り見当たらなかった。

まとめ

コミュニティの活発さなども考えたら第1選択肢はLogbackかLog4j2か、という点は変わりなさそう。
性能を求めるならBlitz4jも検討対象に入れてみたい。ただし性能検証はちゃんとやる。
何にしても公式のパフォーマンス情報は鵜呑みにしてはいけないと思う。