Sprockets tends to be quite verbose in the (dev) log by default under Ruby on 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.
config.assets.debug = false
in your development.rb.
config.assets.debug = false
will concatenate assets into a single file- not what most people want in development
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: It now works for Ruby on Rails 3.2 too (previous attempt fixes before_dispatch
, and 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
Take a look at https://github.com/evrone/quiet_assets and just include it into your Gem file.
For the lazy: gem 'quiet_assets', group: :development
gem 'quiet_assets'
(please add this to the post :))
For Ruby on Rails 3.2, add config.assets.logger = false
to your development environment configuration file, typically found at config/environments/development.rb
. See #4512.
config.assets.logger = nil
works for me
config.assets.logger = nil
does NOT work for me
Two things are enough:
config.assets.debug = false in config/enviroments/development.rb rake assets:precompile. See comment by @oma below; this is not needed
That's all!
rake assets:precompile
is not something we wanna do in development
Eventually, it will be config.assets.logger = nil
, but that part is currently stubbed on master (not done yet).
development.rb
, and it disabled logging of assets.
I know it's an ugly and temporary solution, but I use this:
tail -f log/development.log | grep -vE 'asset'
tail -f log/development.log | grep -vE "(^\s*$|asset)"
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 Ruby on Rails actionpack request logs. The Ruby on 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
config.assets.quiet = true
This is the latest way to go.
development.rb
Use:
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 it to work under Windows as well.
In file 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.
true
.
In file config/environments/development.rb please add:
config.assets.debug = false
config.assets.logger = false
Lograge for the win - it kills Ruby on 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.
The previously mentioned linked 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
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.
Success story sharing
config.assets.logger
to false will only silence what Sprockets outputs. This silences Action Pack requests/responses, which is something that the Rails dev have said they don't intend to silence for special cases.'/dev/null'
with 'NUL
'