首页 文章

在控制台中禁用Rails SQL日志记录

提问于
浏览
217

当我在控制台中执行命令时,有没有办法禁用SQL查询日志记录?理想情况下,如果我可以禁用它并使用控制台中的命令重新启用它,那将会很棒 .

我正在尝试调试一些东西并使用“puts”打印出一些相关数据 . 但是,sql查询输出使其难以阅读 .


Edit: 我找到了另一个解决方案,因为如果我的代码以外的其他东西试图调用logger.warn,则将logger设置为nil有时会引发错误

您可以将 Logger 的级别设置为 1 ,而不是将 Logger 设置为 nil .

ActiveRecord::Base.logger.level = 1 # or Logger::INFO

7 回答

  • 7

    对于Rails 4,您可以将以下内容放在环境文件中:

    # /config/environments/development.rb
    
    config.active_record.logger = nil
    
  • 247

    这是一个我认为更清洁的变体,仍然允许从AR进行潜在的其他日志记录 . 在config / environments / development.rb中:

    config.after_initialize do
      ActiveRecord::Base.logger = Rails.logger.clone
      ActiveRecord::Base.logger.level = Logger::INFO
    end
    
  • 3

    我用过这个: config.log_level = :info edit-in config/environments/performance.rb

    对我很有用,拒绝SQL输出,只显示渲染和重要信息 .

  • 60

    要关闭它:

    old_logger = ActiveRecord::Base.logger
    ActiveRecord::Base.logger = nil
    

    要重新打开它:

    ActiveRecord::Base.logger = old_logger
    
  • 44

    这可能不适合控制台,但Rails有一个解决此问题的方法:Logger#silence

    ActiveRecord::Base.logger.silence do
      # the stuff you want to be silenced
    end
    
  • 10

    如果有人想要 actually 淘汰SQL语句记录(不改变日志记录级别,同时保持其AR模型的日志记录):

    写入日志的行(无论如何,在Rails 3.2.16中)是 lib/active_record/log_subscriber.rb:50 中对 debug 的调用 .

    该调试方法由 ActiveSupport::LogSubscriber 定义 .

    所以我们可以通过覆盖它来淘汰日志:

    module ActiveSupport
      class LogSubscriber
        def debug(*args, &block)
        end
      end
    end
    
  • 7

    在Rails 3.2中,我在config / environment / development.rb中做了类似的事情:

    module MyApp
      class Application < Rails::Application
        console do
          ActiveRecord::Base.logger = Logger.new("#{Rails.root}/log/development.log")
        end
      end
    end
    

相关问题