How to disable logging of asset pipeline (sprockets) messages in Rails 3.1?

六月ゝ 毕业季﹏ 提交于 2019-11-26 05:52:14

问题


Sprockets tends to be quite verbose in the (dev) log by default under Rails 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)
...

I\'d like to either reduce the level of verbosity or disable it altogether. I\'m assuming there is a clean way to disable or reduce the verbosity of the logging by adding a config line in either environment.rb or development.rb similar to config.active_record.logger = nil which silences ActiveRecord SQL statements.


回答1:


Place the following code in 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

Updated: now works for Rails 3.2 too (previous attempt fixes before_dispatch now we're going for the root rack call instead)

Update: A proper Rack middleware solution (instead of fragile alias_method_chain) from @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735




回答2:


Take a look at https://github.com/evrone/quiet_assets and just include it into your Gemfile

For lazy: gem 'quiet_assets', group: :development




回答3:


For Rails 3.2, add config.assets.logger = false to your development environment configuration file, typically found at config/environments/development.rb . See #4512




回答4:


Two things is enough:
1. config.assets.debug = false in config/enviroments/development.rb
2. rake assets:precompile. See comment by @oma below; this is not needed

Thats all!




回答5:


Eventually, it will be config.assets.logger = nil but that part is currently stubbed on master (not done yet)




回答6:


I know it's an ugly and temporary solution but i use this :

tail -f log/development.log | grep -vE 'asset'




回答7:


Many people are confused about the use of config.assets.logger = false. Here is what it does and what it doesn't do.

According the source documentation:

Setting config.assets.logger to false will turn off served assets logging.

However this probably is not what you think it is. It only disables sprocket 'serving' logs, not Rails actionpack request logs. The Rails maintainer explains this clearly here: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Taking example from the link, logs like this are disabled:

Served asset /jquery.isotope.js - 304 Not Modified (0ms)

But logs like this are not

Started GET "/assets/jquery.isotope.js?body=1" for 127.0.0.1 at 2012-01-20 23:16:46 -0500




回答8:


config.assets.quiet = true

This is the latest way to go.




回答9:


in development.rb in config/environments you'll find the line config.assets.debug = true. Switch that to false and most of the asset load output will be gone. On my system only the two requests for application.css and .js remain.




回答10:


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

it's the same code @choonkeat added. I just included to work under windows as well.




回答11:


In config/environments/development.rb please add:

config.assets.debug = false

config.assets.logger = false

This will help toward your problem.




回答12:


Lograge for the win- It kills Rails' annoying logger defaults out of the box (e.g. logging assets, logging partial rendering), and is customizable if you want to add/remove specific items.




回答13:


The below mentioned link solution helps:

https://github.com/evrone/quiet_assets

Also as below it's working fine for me

3.1 (only) (3.2 breaks 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 



回答14:


In config/environments add config.log_level = :error to the .rb files you want to change. This will change the log settings to error only. I hope this helped!



来源:https://stackoverflow.com/questions/6312448/how-to-disable-logging-of-asset-pipeline-sprockets-messages-in-rails-3-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!