Rails 如何去掉 Rails3.2.1 下多余的 LOG 输出?

miclle · 2012年02月02日 · 最后由 miclle 回复于 2012年02月14日 · 6551 次阅读

rails 3.2.1 怎么去掉如下这种日志输出:

Started GET "/assets/admin/jquery.tablesorter.min.js?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800
Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800
Started GET "/assets/admin/editor/kindeditor.js?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800
Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800
Started GET "/assets/admin/editor/lang/zh_CN.js?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800
Started GET "/assets/admin/admin.css?body=1" for 127.0.0.1 at 2012-02-02 09:03:49 +0800

我 development.rb 里有如下内容:

config.after_initialize do |app|
  app.assets.logger = Logger.new('/dev/null')
end

之前华顺弄过的

# 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

在 Rails 3.2.1 下会出错:

/Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activesupport-3.2.1/lib/active_support/core_ext/module/aliasing.rb:31:in `alias_method': undefined method `before_dispatch' for class `Rails::Rack::Logger' (NameError)
    from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activesupport-3.2.1/lib/active_support/core_ext/module/aliasing.rb:31:in `alias_method_chain'
... ...

gem 'quiet_assets', :git => 'git://github.com/AgilionApps/quiet_assets.git'

赞~收下了。

之前看着满屏的 asset 信息真是晕。

没搞懂,为什么 Rails 3.2 还保留着这个 assets 日志,大家都不喜欢。

#4 楼 @huacnlee 3.2 提供了 config.assets.logger = [nil | false],但 Started GET ... 不是 Rails.logger 关心和负责的东西,所以不会增加选项去处理这个。

#5 楼 @ashchan 那 Started GET 是 谁关心和负责的输出的?

#7 楼 @ery 上面说的有点不清楚。默认情况下,每一个对 assets 的请求,会产生两行日志:

```Started GET "/assets/... Served asset /...


其中,第1行是 ActionPack 输出的(Rails rack logger),第二行是 Sprockets 输出的。

3.2 中增加的选项是用来把 Sprockets 的输出关闭(config.assets 用来控制 Sprockets)。而对于 Rails 本身来说,`Started GET...` 那一行跟其他普通请求的日志是一样的,不应该区别对待。

上面那个 Gem 做的,就是判断路径,是 "/assets" 的就消掉。(不过要注意 assets 路径其实是可以定制的。所以 Rails logger 跟 Sprockets 都没办法靠自身来处理这个问题:) 

突然想起,是时候开发 给好的回复加置顶或高亮 的功能了。

#9 楼 @huacnlee 类似知乎的赞同和不赞同功能呗,多好

#10 楼 @jinleileiking 好的无法直接体现出来,我是觉得高亮直接一些

vote 好了,比如 vote 过 10 就高亮

#9 楼 @huacnlee 支持开发 vote 或 like 的新功能~

#12 楼 @lainuo vote 最高的就高亮呗

@jinleileiking @lainuo vote 的数量不好控制,如果设置 10,长久下去终有一天会到 10 的。

#15 楼 @huacnlee vote 最高的就高亮呗,如何

@jinleileiking 那也不行,有时候有好几个不错的回复

很不错的跑题,哈哈哈,个人觉得 vote 方式好 喜欢http://stackoverflow.com

@huacnlee 搞两套排序如何?一套 vote, 一套楼层数?

像问答这种就默认设置成按 vote 排序,类似 stackoverflow

#19 楼 @lainuo 按 vote 排序是个好想法。呵呵 @huacnlee 或者把 vote 最多的几个楼高亮?

#8 楼 @ashchan 明白了,:)

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

http://stackoverflow.com/questions/6312448/how-to-disable-logging-of-asset-pipeline-sprockets-messages-in-rails-3-1/7508407#7508407

需要 登录 后方可回复, 如果你还没有账号请 注册新账号