在 rails 4 控制台中,如何将所有 sql activity 记录到文件而不是控制台输出?
In the rails 4 console, how do I log all sql activity to file BUT not to the console output?
很多类似的问题问如何在控制台隐藏sql日志window,答案建议更改Active Record的日志级别或完全关闭AR日志记录。
但是我仍然希望 AR 记录所有内容,我只想将其记录到文件中,而不是控制台输出 window(因为它使控制台嘈杂所以我看不到我的手动日志)。
如何实现我想要的?
此 ActiveRecord::Railtie 代码用于向控制台广播记录器消息:
# When loading console, force ActiveRecord::Base to be loaded
# to avoid cross references when loading a constant for the
# first time. Also, make it output to STDERR.
console do |app|
require "active_record/railties/console_sandbox" if app.sandbox?
require "active_record/base"
console = ActiveSupport::Logger.new(STDERR)
Rails.logger.extend ActiveSupport::Logger.broadcast console
end
因此,当您第一次进入控制台时,您可以做的一件事是将 ActiveRecord::Base.logger
设置为一个新的记录器,该记录器不会将其消息广播到控制台。例如:
ActiveRecord::Base.logger = ActiveSupport::Logger.new("log/development.log")
"log/development.log" 可以更改为您要发送 SQL 输出的任何位置。
很多类似的问题问如何在控制台隐藏sql日志window,答案建议更改Active Record的日志级别或完全关闭AR日志记录。
但是我仍然希望 AR 记录所有内容,我只想将其记录到文件中,而不是控制台输出 window(因为它使控制台嘈杂所以我看不到我的手动日志)。
如何实现我想要的?
此 ActiveRecord::Railtie 代码用于向控制台广播记录器消息:
# When loading console, force ActiveRecord::Base to be loaded
# to avoid cross references when loading a constant for the
# first time. Also, make it output to STDERR.
console do |app|
require "active_record/railties/console_sandbox" if app.sandbox?
require "active_record/base"
console = ActiveSupport::Logger.new(STDERR)
Rails.logger.extend ActiveSupport::Logger.broadcast console
end
因此,当您第一次进入控制台时,您可以做的一件事是将 ActiveRecord::Base.logger
设置为一个新的记录器,该记录器不会将其消息广播到控制台。例如:
ActiveRecord::Base.logger = ActiveSupport::Logger.new("log/development.log")
"log/development.log" 可以更改为您要发送 SQL 输出的任何位置。