Ruby on Rails 3.1でアセットパイプライン(スプロケット)メッセージのロギングを無効にするにはどうすればよいですか?


378

Ruby on Rails 3.1(RC1)のデフォルトでは、スプロケットは(dev)ログで非常に冗長になる傾向があります。

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)
...

冗長性のレベルを下げるか、完全に無効にします。

ActiveRecord SQLステートメントを無音にするか、environment.rbまたはdevelopment.rb同様にconfig行を追加することにより、ログの冗長性を無効化または削減するためのクリーンな方法があると思いconfig.active_record.logger = nilます。


誰かがこれについてバグを報告しました:#2639。9月2日現在も「オープン」です。
istvanp

14
この質問に対する承認済みの回答は変更または更新する必要があります。Rails 3.2 config.assets.debug = falseでは、development.rbに入れるだけです。
スチュワートジョンソン

7
@StewartJohnson- config.assets.debug = falseアセットを単一のファイルに連結します- ほとんどの人が開発で望むものではありません
Yarin

回答:


382

次のコードを 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

更新:Ruby on Rails 3.2でも動作するようになりました(以前の試みは修正されましたがbefore_dispatchcall代わりにルートラックを使用します)

更新:alias_method_chain@macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735からの(fragileではなく)適切なRackミドルウェアソリューション


3
Rails 3.2.1の時点では、これらのプルだけではスプロケットのロギングが抑制されず、choonkeatのファイルがまだ必要です。
IAmNaN 2012年

5
確かに。このファイルのようなサウンドは常に必要ですconfig.assets.logger。falseに設定すると、Sprocketsが出力するものだけが無音になるためです。これはアクションパックのリクエスト/レスポンスを沈黙させます。これは、Rails開発者が特別な場合のために沈黙させるつもりはないと述べているものです
Ben Kreeger、2012年

32
ええと。これをRailsコアに入れるだけです。config.assetsのオプションにする
jsharpe

2
Windowsでは'/dev/null'、 ' NUL'に置き換えます
Matt

4
Rails 4.2.0上で動作します
シリアルエンジン

189

https://github.com/evrone/quiet_assetsを見て、それをGemファイルに含めてください。

怠惰な場合: gem 'quiet_assets', group: :development


6
すばらしい仕事ですが、これには別の宝石が必要なのは非常に悲しいことです。
Adam Spiers 2013年

1
私はホセValimがここに正しい決断をしたと思うgithub.com/rails/rails/issues/2639レールのすべての着信要求をログに記録しなければならないと私はそれに同意し、私はスプロケットは、ソースマップをサポートするときに我々は、このオーバーヘッドを取り除くことができると思いgithub.com / sstephenson / sprockets / issues / 310
ルート

5
怠惰な場合:(gem 'quiet_assets'これを投稿に追加してください:))
reto

52

Ruby on Rails 3.2の場合config.assets.logger = false、通常はにある開発環境構成ファイルに追加しますconfig/environments/development.rb#4512を参照してください。


期待どおりにレイズ4で動作します。これを機能させるには、サーバーを再起動する必要があります。
Langusten Gustel 2013

2
Rails 4.0.2がconfig.assets.logger = nil動作します
バイトロシア語2014年

4
Rails 4.0.4 config.assets.logger = nilが機能しない
hendrikbeck 14

28

2つのことで十分です。

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

それで全部です!


19
1.正しいです。ありがとう!いいえ2.を削除してください。これrake assets:precompileは、開発でやりたいことではありません
oma

これはおそらく元の質問が投稿された時点では機能しませんでしたが、現在は機能しており(@Raceが述べたように、すでに3.2.3を使用しています)、ここで受け入れられた回答が返されるはずです。
radiospiel 2013

2
istvanpが以下に指摘するように、それはあなたが思っていることをしていません。すべてのJSおよびCSSアセットを1つの大きなファイルにコンパイルするだけです。アセットのロギングはオフになりません。
davidgoli 2013

2
これはレール4.2.2で必要なすべてです
thisfeller '19

@davidgoliの発言に加えて、config.assets.debugはアセットの連結を制御します。これをオフにすると、ブラウザを使用したJSやCSSなどのデバッグがより効率的になります。quiet_assetsのようなものは、assets.debugをトグルしてデバッグする必要がないように、ロギングをスケルチします。
johncip 2016

27

最終的にはになりますがconfig.assets.logger = nil、その部分は現在マスターでスタブされています(まだ完了していません)。


5
Rails 3.1.3でも動作しません。@nessur:それはあなたのために働くと確信していますか?Timが言うように、#2639はまだ開いており、修正の問題には何の指摘もありません(参照されたプルリクエストは両方とも拒否されました)。
アダムスパイアーズ

これはこの段階では実装されません。 github.com/rails/rails/issues/4569
23inhouse 2012

リンクによる@AdamSpiersgithub.com/rails/rails/pull/3795#issuecomment-3549669 「Railsは、特定のルートをログに記録しないようにロガーやロガー関連のミドルウェアを特別なケースにすることはありません」
23inhouse

3
残念。それでもRails 4はアセットロギングを簡単に無効にすることができません。
トム・ロッシ

1
私はRails 4.2を使用していますが、これをに追加development.rbすると、アセットのロギングが無効になります。
ジャック

12

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

tail -f log / development.log | grep -vE 'アセット'


9
:ここにも空白行を削除し、改善一つだtail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

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

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

config.assets.loggerfalseに設定すると、提供されるアセットのロギングがオフになります。

しかし、これはおそらくあなたが思っていることではありません。Ruby on Railsアクションパック要求ログではなく、スプロケットの「提供」ログのみを無効にします。Ruby on Railsのメンテナーがこれをここで明確に説明しています:https : //github.com/rails/rails/issues/4569#issuecomment-3594500


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

配信済みアセット/jquery.isotope.js-304未変更(0ms)

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

2012-01-20 23:16:46 -0500に127.0.0.1のGET "/assets/jquery.isotope.js?body=1"を開始しました


10
config.assets.quiet = true

これが最新の方法です。


Rails 5で完全に動作します。これをダンプしてくださいdevelopment.rb
Andreykul

デバッグと相まって、Railsの5の私のニーズのすべてを解決していない
Pysis

7

使用する:

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でも動作するように含めました。


7

config / environmentsのファイルdevelopment.rbには、次の行があります。config.assets.debug = true

に切り替えるとfalse、アセットロード出力のほとんどが失われます。私のシステムでは、application.cssと.jsの2つのリクエストのみが残っています。


3
この設定では、デバッグを容易にするためにtrueに設定されている場合にのみ、スタイルシートとJavaScriptを別々のファイルに分割できます。false(デフォルト)に設定すると、すべてが1つの大きなファイルにバンドルされます。そのため、実際にはデバッグ出力が削減されますが、たとえばイメージがある場合、それらはまったく影響を受けません。公式ガイド情報はこちら
istvanp 2011

1
そうですか。それを片付けてくれてありがとう。しかし、この変数の設定は変更しなかったため、デフォルトはでしたtrue
TKAB、2011

5

ファイルconfig / environments / development.rbに以下を追加してください:

config.assets.debug = false

config.assets.logger = false

2

勝利のための Lograge -Ruby on Railsの煩わしいロガーのデフォルトをデフォルトで殺し(例えば、アセットのロギング、部分的なレンダリングのロギング)、特定のアイテムを追加/削除したい場合はカスタマイズ可能です。


0

前述のリンクされたソリューションは、次のことに役立ちます。

https://github.com/evrone/quiet_assets

また、以下のように、それは私にとってはうまくいきます:

3.1(のみ)(3.2はbefore_dipatchを中断)

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

-1

config / environmentsでconfig.log_level = :error、変更する.rbファイルに追加します。これにより、ログ設定がエラーのみに変更されます。


残念ながら、ほとんどの場合、デバッグレベルのリクエストとSQLデータを確認するためにログを使用します。アセットメッセージは情報レベル(デバッグレベルよりも低い)なので、その設定で必要なものを取得しても無駄です。
istvanp

2
これは良い考えではありません。それはあなたがまだ記録したいかもしれない他の情報レベルのメッセージを隠します。
ifightcrime 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.