rails4におけるTaggedLoggingの謎
rails3.2からTaggedLoggingという機能が追加された。
その名の通り、ログにタグをいれられる。taggedメソッドにブロックを渡すと、そのブロック内でのみタグが出力される。
また、push_tagメソッドを使えばそれ以降もタグが出力され続ける。
Rails.logger.tagged('test tag') { logger.info 'test log' } # => [test tag] test log Rails.logger.info 'test log' # => [test tag] test log Rails.logger.push_tags('test tag') Rails.logger.info 'test log' # => [test tag] test log
参考:http://railsdoc.eiel.info/active_support/tagged_logging/
で、ruby2.0.0-p247, rails4.0.0の環境だとこれらのメソッドはデフォルトでRails.loggerにインクルードされている。
config.logger = ActiveSupport::TaggedLogging.new(Logger.new(config.paths["log"].first))
本来ならこんな感じのコードをconfig/initializers/development.rbなどにいれて初めてインクルードされると思ってたのに…
Rails.logger.class.ancestorsで調べてみてもTaggedLoggingに関するモジュールがインクルードされている形跡はない。
しかも、config/environments/development.rbなどでconfig.log_tagsを設定してもそれが出力されることはない。
独自に入れてるgemが悪さをしているのかと思って、rails newで空のプロジェクトを作って同じく試してみても同様の症状がでてくる。なんでだろうか?
タグ機能はLTSVとの相性も良さそうなので、できればどうにかしてちゃんと使えるようにしたいのだけど…
[追記] 2014/1/12 19:53
別に謎でもなんでもなく、普通にconfig.log_tagsが使えた。
config.log_tagsはRack::Loggerで出力されるログにのみ適用される。なのでlog/development.logなどに出力される
'Started GET "/" for 127.0.0.1 at 2014-01-12 19:35:39 +0900'
みたいなログに対してはちゃんとtagged logがついている。
Rails.logger.infoなどのようにアプリ内で直にloggerを叩く場合はconfig.log_tagsは適用されず、taggedメソッドで設定したタグが適用される。