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.active_record.logger = nil

4

14 に答える 14

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_dispatchにルート ラックを使用します)。call

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

于 2011-09-22T01:05:09.720 に答える
189

https://github.com/evrone/quiet_assetsを見て、Gem ファイルに含めるだけです。

怠け者のために:gem 'quiet_assets', group: :development

于 2012-03-22T07:11:22.657 に答える
52

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

于 2012-03-14T01:18:37.927 に答える
28

次の 2 つで十分です。

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

それで全部です!

于 2011-12-10T23:47:04.143 に答える
27

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

于 2011-06-10T22:03:15.890 に答える
12

の使い方に戸惑う人も多いでしょうconfig.assets.logger = false。これができることとできないことです。

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

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

しかし、これはおそらくあなたが思っているものではありません。Ruby on Rails アクションパックのリクエスト ログではなく、sprocket の「serving」ログのみを無効にします。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" を開始しました

于 2014-09-17T06:27:35.690 に答える
12

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

テール -f ログ/development.log | grep -vE 'アセット'

于 2011-09-08T16:17:34.060 に答える
7

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

これを切り替えるとfalse、ほとんどのアセット ロード出力がなくなります。私のシステムでは、application.css と .js の 2 つの要求だけが残っています。

于 2011-09-07T08:59:05.970 に答える
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でも動作するように含めました。

于 2012-02-07T16:00:54.020 に答える
5

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

config.assets.debug = false

config.assets.logger = false
于 2013-08-28T15:22:07.543 に答える
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
于 2014-01-11T12:52:06.177 に答える
-1

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

于 2011-09-01T12:11:18.247 に答える