Rails 3.1で資産パイプライン(スプロケット)メッセージのロギングを無効にする方法は?

StackOverflow https://stackoverflow.com/questions/6312448

質問

スプロケットは、レール3.1(RC1)の下でデフォルトで(開発)ログでかなり冗長になる傾向があります。

Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/application.css.scss  (5ms)  (pid 6303)


Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/default.css.scss  (15ms)  (pid 6303)

...
Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Served asset /default/header_logo.gif - 304 Not Modified  (7ms)  (pid 6303)
Served asset /default/header_bg.gif - 304 Not Modified  (0ms)  (pid 6246)
Served asset /default/footer_bg.gif - 304 Not Modified  (49ms)  (pid 6236)
...

冗長性のレベルを下げるか、それを完全に無効にしたいと思います。どちらにも構成ラインを追加して、ロギングの冗長性を無効にしたり減らしたりするクリーンな方法があると仮定しています environment.rb また development.rb に似ている config.active_record.logger = nil ActiverCord SQLステートメントを沈黙させます。

役に立ちましたか?

解決

次のコードをに配置します config/initializers/quiet_assets.rb

if Rails.env.development?
  Rails.application.assets.try(: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'] =~ %r{^/assets/}
      call_without_quiet_assets(env)
    ensure
      Rails.logger.level = previous_level
    end
    alias_method_chain :call, :quiet_assets
  end
end

更新:今ではRails 3.2でも動作します(以前の試行修正 before_dispatch 今、私たちはルートラックに行きます call 代わりは)

更新:適切なラックミドルウェアソリューション(壊れやすい代わりに alias_method_chain)@macournoyerから https://github.com/rails/rails/issues/2639#issuecomment-6591735

他のヒント

を見てみましょう https://github.com/evrone/quiet_assets そして、それをあなたのgemfileに含めるだけです

レイジーのために: gem 'quiet_assets', group: :development

Rails 3.2の場合、追加 config.assets.logger = false 開発環境構成ファイルに、通常は config/environments/development.rb 。見る #4512

2つのことで十分です:
1. config.assets.debug = falseconfig/enviroments/development.rb
2. rake assets:precompile. 以下の@omaのコメントを参照してください。これは必要ありません

それで全部です!

最終的には、そうなるでしょう config.assets.logger = nil しかし、その部分は現在マスターに突き刺されています(まだ完了していません)

私はそれが醜くて一時的な解決策であることを知っていますが、私はこれを使用します:

テール-f log/development.log | grep -ve 'asset'

多くの人々は、の使用について混乱しています config.assets.logger = false. 。これがそれがしていることと、それがしていないことです。

によると ソースドキュメント:

設定 config.assets.logger Falseには、提供される資産の記録がオフになります。

しかし、これはおそらくあなたがそうであると思うものではありません。 スプロケットの「サービング」ログのみを無効にします, 、Rails ActionPack要求ログではありません。 Railsメンテナーはこれをここではっきりと説明しています:https://github.com/rails/rails/issues/4569#issuecomment-3594500


リンクから例を挙げると、このようなログは無効になっています。

Asset /jquery.isotope.js -304修正(0ms)を提供する

しかし、このようなログはそうではありません

2012-01-20 23:16:46 -0500で127.0.0.1の "/sassets/jquery.isotope.js?body = 1"を開始

config.assets.quiet = true

これが最新の方法です。

development.rb in config/環境では、行が見つかります config.assets.debug = true. 。に切り替えます false そして、資産の負荷出力のほとんどはなくなります。私のシステムでは、application.cssと.jsの2つの要求のみが残ります。

Rails.application.assets.logger = Logger.new(RUBY_PLATFORM =~ /(win|w)32$/ ? "NUL" : "/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

@choonkeatが追加されたのと同じコードです。 Windowsの下でも仕事をするだけです。

config/environments/development.rbで追加してください:

config.assets.debug = false

config.assets.logger = false

これはあなたの問題に役立ちます。

ログレージ Win-It It Killの迷惑なロガーのデフォルトは、ボックスから外出します(例:ロギング資産、部分的なレンダリングのロギング)。特定のアイテムを追加/削除する場合はカスタマイズ可能です。

以下のリンクソリューションが役立ちます:

https://github.com/evrone/quiet_assets

また、以下のように、私にとっては正常に機能しています

3.1(のみ)(3.2ブレークの前)

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
3.2 Rails - Rack root tap approach
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 

構成/環境に追加 config.log_level = :error 変更する.RBファイルに。これにより、ログ設定がエラーのみに変更されます。これが役立ったことを願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top