簡體   English   中英

在控制台中禁用Rails SQL日志記錄

[英]Disable Rails SQL logging in console

當我在控制台中執行命令時,有沒有辦法禁用SQL查詢日志記錄? 理想情況下,如果我可以禁用它並使用控制台中的命令重新啟用它,那將是很棒的。

我正在嘗試調試一些東西並使用“puts”打印出一些相關數據。 但是,sql查詢輸出使其難以閱讀。


編輯:我找到了另一個解決方案,因為將記錄器設置為nil有時會引發錯誤,如果我的代碼以外的其他東西試圖調用logger.warn

您可以將記錄器的級別設置為1而不是將記錄器設置為nil

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

要關閉它:

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

要重新打開它:

ActiveRecord::Base.logger = old_logger

這是我認為更清潔的一種變體,它仍允許從AR進行潛在的其他日志記錄。 在config / environments / development.rb中:

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

這可能不是適合控制台的解決方案,但Rails有一個解決此問題的方法: Logger#silence

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

如果有人想要實際刪除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

對於Rails 4,您可以將以下內容放在環境文件中:

# /config/environments/development.rb

config.active_record.logger = nil

我使用了這個: config.log_level = :info edit-in config/environments/performance.rb

對我很有用,拒絕SQL輸出,只顯示渲染和重要信息。

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

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end

就像一個FYI,在Rails 2中你可以做到

ActiveRecord::Base.silence { <code you don't want to log goes here> }

顯然,如果你do end ,花括號可以用do end block替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM