2013-03-21

railsの部分テンプレートのログ出力を出さなくする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsで部分テンプレートをレンダリングすると以下のようなログが出力されます。

Started GET "/hoge" for 10.10.10.10 at Thu Mar 21 09:50:33 +0900 2013 Processing by HogeController#index as HTML
Rendered vendor/bundle/ruby/1.8/gems/active_scaffold-3.0.26/frontends/default/views/_list_with_header.html.erb (576.5ms)
Rendered vendor/bundle/ruby/1.8/gems/active_scaffold-3.0.26/frontends/default/views/list.html.erb within layouts/application (638.4ms)
Completed 200 OK in 1035ms (Views: 984.1ms | ActiveRecord: 521.7ms)

このRendered・・・の部分が大量に出てくるページがあったのです。

development環境ならば、まぁよいのですがproduction環境でも出ていました。

一つの方法として、
config/evironments/production.rb

config.log_level = :warn
と入れてやるとログが出なくなります。
上記のログはinfoレベルで出力されているようです。

ただ、これだと
Started GET ・・・
Completed ・・・
も出なくなります。

これは出ていてもよいなぁと思うわけです。

Rails4であれば、
config.action_view.logger = nil
とするとよいようです。

残念ながらRails3系では利用できません。
その代わり以下のようなモンキーパッチを用意してやればOKです。

module ActionView
  class LogSubscriber < ActiveSupport::LogSubscriber
    def logger
      Logger.new('/dev/null')
    end
  end
end

モンキーパッチは、どうやら
config/initializers
以下に置いとくのがよいようなので、上記のパッチを

config/initializers/action_view_logger_patch.rb
とでもして置いておけばOKです。

以下が参考になりました。
http://stackoverflow.com/questions/11991967/rails-log-too-verbose

コメントを投稿