由于某些原因(可能是更新的gem),Rails现在记录我所有的SQL命令。 我运行autotest时,也会在测试期间频繁记录它们。 我该如何关闭它?
我尝试将以下内容添加到config / environments / test.rb中,但它没有起作用。 logger
已经是nil
。
# ActiveRecord::Base.logger = nil
# ActiveRecord::Base.logger.level = 1
Rails 4.0.0
->Rails 4.0.0
由于某些原因(可能是更新的gem),Rails现在记录我所有的SQL命令。 我运行autotest时,也会在测试期间频繁记录它们。 我该如何关闭它?
我尝试将以下内容添加到config / environments / test.rb中,但它没有起作用。 logger
已经是nil
。
# ActiveRecord::Base.logger = nil
# ActiveRecord::Base.logger.level = 1
Rails 4.0.0
->Rails 4.0.0
好的,我找到了。这个可行:
config.after_initialize do
ActiveRecord::Base.logger = nil
end
ActiveRecord
只记录 SQL。其他日志不受影响。请查看是否有其他东西将其关闭。 - Chloe如果有人想要实际上取消SQL语句记录(而不改变日志级别,并保持来自他们的AR模型的日志记录):
在Rails 3.2.16中,写入日志的行是在lib/active_record/log_subscriber.rb:50中调用'debug'的那一行。
'debug'方法由ActiveSupport::LogSubscriber定义。
因此,我们可以通过以下方式覆盖它来取消日志记录:
module ActiveSupport
class LogSubscriber
def debug(*args, &block)
end
end
end
你可以在运行时调用此代码,它不需要在配置文件中。
例如,如果您将其放入特定的测试用例中
# test/functionals/application_controller_test.rb for example
ActiveRecord::Base.logger = nil
它同样有效,并且这样你可以在运行时切换它。如果你只想压制几行代码或一个块,这种做法很有用。
grep -r 'config.logger' .
并查看它的设置。 - franksortconfig/environments/production.rb: # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
。 - Chloe