tumblr

tumblr(タンブラー)は、メディアミックスブログサービス。ブログとミニブログ、そしてソーシャルブックマークを統合したマイクロブログサービスである。アメリカのDavidville.inc(現: Tumblr, Inc.)により2007年3月1日にサービスが開始された。

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メソッドで設定したタグが適用される。