ログモジュールのベンチマーク

主要なモジュールでベンチマーク取ってみました。
単純にファイル出力するだけの使い方にしてみました。出力フォーマットも統一しています。

  • Log::Dispatch
  • Log::Handler
  • Log4perl
  • Log::Minimal

バージョン

perl 5.14.1
Log::Dispatch 2.29
Log::Handler 0.71
Log::Log4perl 1.33
Log::Minimal 0.08

実行結果(その1)

% perl bench_log.pl 30000
Benchmark: timing 30000 iterations of log4perl, log_dispatch, log_handler, log_minimal...
  log4perl:  2 wallclock secs ( 1.87 usr +  0.19 sys =  2.06 CPU) @ 14563.11/s (n=30000)
log_dispatch:  4 wallclock secs ( 3.67 usr +  0.21 sys =  3.88 CPU) @ 7731.96/s (n=30000)
log_handler:  1 wallclock secs ( 0.85 usr +  0.44 sys =  1.29 CPU) @ 23255.81/s (n=30000)
log_minimal:  1 wallclock secs ( 0.69 usr +  0.17 sys =  0.86 CPU) @ 34883.72/s (n=30000)
                Rate log_dispatch     log4perl  log_handler  log_minimal
log_dispatch  7732/s           --         -47%         -67%         -78%
log4perl     14563/s          88%           --         -37%         -58%
log_handler  23256/s         201%          60%           --         -33%
log_minimal  34884/s         351%         140%          50%           --


Log::Dispatchが遅い…
中見てみたらParams::Validate使ってたので無効にしたベンチマークも取ってみる。↓

実行結果(その2:Validate無効)

% PERL_NO_VALIDATION=1 perl bench_log.pl 30000
Benchmark: timing 30000 iterations of log4perl, log_dispatch, log_handler, log_minimal...
  log4perl:  2 wallclock secs ( 1.88 usr +  0.19 sys =  2.07 CPU) @ 14492.75/s (n=30000)
log_dispatch:  2 wallclock secs ( 2.55 usr +  0.19 sys =  2.74 CPU) @ 10948.91/s (n=30000)
log_handler:  2 wallclock secs ( 0.85 usr +  0.42 sys =  1.27 CPU) @ 23622.05/s (n=30000)
log_minimal:  1 wallclock secs ( 0.69 usr +  0.17 sys =  0.86 CPU) @ 34883.72/s (n=30000)
                Rate log_dispatch     log4perl  log_handler  log_minimal
log_dispatch 10949/s           --         -24%         -54%         -69%
log4perl     14493/s          32%           --         -39%         -58%
log_handler  23622/s         116%          63%           --         -32%
log_minimal  34884/s         219%         141%          48%           --


そんなに変わらなかった。


汎用性も考慮するとやはりcpan本でも薦められているLog::Handlerが良さげなのかな