如何在测试中关闭Rails的SQL日志记录?

12

由于某些原因(可能是更新的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


1
在您的项目中运行 grep -r 'config.logger' . 并查看它的设置。 - franksort
这是唯一的结果:config/environments/production.rb: # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) - Chloe
3个回答

13

好的,我找到了。这个可行:

config.after_initialize do
  ActiveRecord::Base.logger = nil
end

这个限制所有日志的功能非常棒,但我只想限制SQL日志,就像LOG4J中的类别一样。我还使用跟踪/调试日志记录,并不想关闭它们。Rails日志记录是否支持这种粒度的日志记录?或者我必须使用LOG4R来实现这种目的? - alwynd
1
@alwynd ActiveRecord 只记录 SQL。其他日志不受影响。请查看是否有其他东西将其关闭。 - Chloe

2

如果有人想要实际上取消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

2

你可以在运行时调用此代码,它不需要在配置文件中。

例如,如果您将其放入特定的测试用例中

# test/functionals/application_controller_test.rb for example
ActiveRecord::Base.logger = nil

它同样有效,并且这样你可以在运行时切换它。如果你只想压制几行代码或一个块,这种做法很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接