QA@IT

分析・調査しやすい Rails のログ出力の方法

5155 PV

Rails がデフォルトで出力するログは、あまり機械可読性が高くなく、開発時にはよくても、運用時に分析・調査するのがとても大変なように思います。

たとえば、あるリクエストで例外が発生したときに、同じユーザがどのようにページ遷移してきたか調べる、といった調査は非常に面倒です。

Rails のログについて、こんなフォーマットで出力している、この記事を参考するとよい、便利なライブラリがある、などの情報があれば、お聞かせください。

回答

discourse というアプリのログが参考になりました(そのうちマネしてみようと思って、まだやっていません)。以前、概要だけブログにメモしておきました。

編集 履歴 (0)
  • 機械可読性を求めているのでしたら、少しはずしているかもしれません。 -
  • あと、こんな雑談メモがありました。 http://d.hatena.ne.jp/kitokitoki/20130207/p1 -
  • 回答ありがとうございます。discourse の例は、自前のロガーを作って、例外発生時に current_user の id などとともに XML で非同期出力、という感じでしょうか。XML だと自前で分析・調査用のアプリケーション書く必要がありそうですね。 -
  • メモ、参考になります。 @kyanny さんの tweet にある、session_id 入れる、ファイル分けない、どんなに長くても一行、は良さそうですね。 -

行志向で柔軟に属性を定義できるフォーマットとしてはLTSVが良さそうです。タブ区切りでkey:valueな形式のシンプルなフォーマットです。

type:ltsv [\t] user_id:1 [\t] controller:home [\t] action:index [\t] ...

のように出力しておいて、

tail -f production.log | grep type:ltsv | grep user_id:1 | cut -f 2-4

のようにしてuser_id:1の行動を追うことができます。XMLやJSONにくらべるとcutコマンドがそのまま使えたり、人間にも機械にもやさしいバランスの良い仕様だと思います。

編集 履歴 (0)
  • 回答ありがとうございます。LTSV は確かに良さそうです。Rails.logger から出力できるようにするのはなかなか大変そうですね...。 -
  • 普通にlogger.infoで出力できますよ。なんなら、LTSVを標準でサポートしている https://github.com/kenn/tidy_logger っていうのもあります。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。