378

默认情况下,在 Ruby on Rails 3.1 (RC1) 下,Sprockets 在 (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)
...

我想降低详细程度或完全禁用它。

我假设有一种干净的方法来禁用或减少日志记录的详细程度,方法是在其中一个environment.rbdevelopment.rb类似的配置行中添加一个配置行,以config.active_record.logger = nil使 ActiveRecord SQL 语句静音。

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 https://github.com/rails/rails/issues/2639#issuecomment-6591735的适当的 Rack 中间件解决方案(而不是脆弱的)

于 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

两件事就足够了:

  1. config.assets.debug = falseconfig/enviroments/development.rb
  2. rake assets:precompile. 请参阅下面@oma 的评论;这不是必需的

就这样!

于 2011-12-10T23:47:04.143 回答
27

最终,它将是config.assets.logger = nil,但该部分目前在 master 上存根(尚未完成)。

于 2011-06-10T22:03:15.890 回答
12

我知道这是一个丑陋的临时解决方案,但我使用这个:

尾-f 日志/development.log | grep -vE '资产'

于 2011-09-08T16:17:34.060 回答
12

许多人对使用config.assets.logger = false. 这是它做什么和不做什么。

根据源文档

设置config.assets.logger为 false 将关闭服务资产日志记录。

然而,这可能不是你想象的那样。它只禁用 sprocket 'serving' 日志,而不是 Ruby on Rails actionpack 请求日志。Ruby on Rails 维护者在这里清楚地解释了这一点: https ://github.com/rails/rails/issues/4569#issuecomment-3594500


以链接为例,这样的日志被禁用:

服务资产 /jquery.isotope.js - 304 未修改 (0ms)

但是像这样的日志不是

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

于 2014-09-17T06:27:35.690 回答
10
config.assets.quiet = true

这是最新的方法。

于 2016-08-11T21:51:27.163 回答
7

config/environments的文件development.rb中,您会找到.config.assets.debug = true

将其切换到false大多数资产负载输出将消失。在我的系统上,只有 application.css 和 .js 这两个请求仍然存在。

于 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 回答
2

Lograge for the win - 它消除了 Ruby on Rails 恼人的记录器默认设置(例如记录资产、记录部分渲染),并且如果您想添加/删除特定项目,它是可定制的。

于 2014-01-07T14:43:54.007 回答
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/environments 添加config.log_level = :error到要更改的 .rb 文件。这会将日志设置更改为仅错误。

于 2011-09-01T12:11:18.247 回答