Rails3で、assetへのアクセスログが多すぎる場合にログを整理する方法

Rails3で、bootstrapを入れるなどすると1ページ読み込むたびに複数のJSファイルやCSSファイルを読み込むため、ログがぶわーっ!っと流れてしまい、ログが使い物にならなくなる。たとえば次のようなログが大量に流れる。

Started GET "/assets/twitter/bootstrap/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2012-05-11 17:30:36 +0900
Served asset /twitter/bootstrap/bootstrap-collapse.js - 200 OK (2ms)


Started GET "/assets/twitter/bootstrap/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2012-05-11 17:30:36 +0900
Served asset /twitter/bootstrap/bootstrap-carousel.js - 200 OK (2ms)

で、このようなログを出力しないようにする。

解決方法はこちら。Rails3.1とRails3.2で方法が違うので注意。

Rails3.1の場合、app\config\initializers\quiet_assets.rbを作成し次の内容を記述する。

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def before_dispatch_with_quiet_assets(env)
    before_dispatch_without_quiet_assets(env) unless env['PATH_INFO'].index("/assets/") == 0
  end
  alias_method_chain :before_dispatch, :quiet_assets
end

Rails3.2の場合、app\config\initializers\quiet_assets.rbを作成し次の内容を記述する。

Rails.application.assets.logger = Logger.new('/dev/null') 
Rails::Rack::Logger.class_eval do 
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0 
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end 
  end 
  alias_method_chain :call, :quiet_assets 
end 

Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true と言うログが大量に出てやっぱりログが流れる場合は次のようにする。
環境によって異なるが、 ~/.rbenv/versions/1.9.3-p125/lib/ruby/1.9.1/webrick/httpresponse.rb にこちらのような修正をする。

No Comments

Post a Comment

コメントを投稿するには、下の計算の答えを入力する必要があります。答えは半角数字で入力してください。 * Time limit is exhausted. Please reload the CAPTCHA.