[英]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.