Railsのログにクライアント情報を追加する

こんにちは、鈴木です。

 

Rails ではデフォルトで以下のような形式のログが出力されますね。

これにクライアント情報も含まれていたら便利かなと思いました。

 

具体的には、以下のようなグロが出力される想定です。(横に長いのでスクロースしないと違いが分からないかもしれませんが、一行目の最後に「from 〜〜〜」が増えています。)

この 1 行目は、Rails::Rack::Logger#started_request_message(request) が生成しています。

 

モンキーパッチで。。

ということで、このメソッドを修正するモンキーパッチを書きました。

書いてから気付いたのですが、Ruby2.0 で登場した Module#prepend を使ったほうが行儀が良いですね。

 

Module#prepend を使う。

Module#prepend を使うように書き換えてみました。

(ご存知ではない方は、「Ruby2.0のModule#prependは如何にしてalias_method_chainを撲滅するのか!?」をご覧ください。)

先程よりもコードがすっきりしましたね。

面倒だったのでモジュールを定義してから prepend に渡さずに、その場で Module.new しました。

 

Module#prepend の引数に Module.new ってどうよ?

Module#prepend を使うパターンでは、prepend の引数に名前の無いモジュール(Module.new で動的に生成したモジュール)を渡しました。

モジュールの継承関係を確認すると「#<Module:0x9940c24>」のようなものが含まれてしまい、なんとなく見た目がよろしくありません。

これってどうよ?という話なのですが、どう思われますか?

以下のように名前のついたモジュールを定義してから prepend すれば、継承関係の中にもその名前が含まれるので使う側に優しいです。

きちんとしたライブラリを作る場合は、多少面倒でも名前のあるモジュールを定義した上で prepend した方が良いかもしれません。

 

Comments are closed, but you can leave a trackback: Trackback URL.