如何在Rails控制台中隐藏数据库输出?

111

在Rails的新版本中,我猜测从3开始,数据库查询会输出到控制台。这通常很有用,但当你不想看到它时该怎么隐藏呢?

在较新的Rails版本中(我猜是从3版本开始),数据库查询结果默认会输出到控制台。这种行为通常是很有用的,但是如果您希望在某些情况下隐藏它,该怎么做呢?
6个回答

194

更好的方法是将以下内容输入控制台:

ActiveRecord::Base.logger.level = 1 

防止尝试使用已设置为 nil 的记录器指针而导致问题(来源:在控制台中禁用Rails SQL日志记录

要重新打开它

ActiveRecord::Base.logger.level = 0

33
谢谢。要重新启用它,请使用 ActiveRecord::Base.logger.level = 0。该语句意思是关闭并重新打开 ActiveRecord 日志记录器。 - thebenedict
有没有想过如何使用Mongoid实现这个功能? - Jesse Farmer

30
ActiveRecord::Base.logger = nil

这里获取的内容:


6
这可能导致NoMethodError出现,因为ActiveRecord期望ActiveRecord::Base.logger是一个对象而不是nil - Aaron B. Russell

12

简短回答:在 development.rb 文件中更改或添加 config.log_level 的值,以便有一行类似于:

config.log_level = :info

1
不,这似乎对控制台中正在发生的事情没有任何影响。此外,我更喜欢不需要我更改项目文件的解决方案。 - Roger Ertesvag
好的,这个解决方案对我在webrick上运行有效,但你可能使用其他服务器或在生产或测试模式下运行? - madth3
3
它适用于更改日志文件的内容。但问题是关于Rails控制台,而不是日志文件。 - Roger Ertesvag

5

来自我的一个朋友:

your_query; nil

7
这将阻止 Ruby 控制台将表达式的结果输出到控制台,但不会阻止 ActiveRecord 将 SQL 信息输出到 Rails 记录器中。 - eremzeit
1
给前面的评论者:这个回答解决了问题,而且是唯一一个对我有用的答案,还能有什么更好的呢? - valk
3
我认为这并没有完全回答问题。如@eremzeit所说,这不会阻止所有的SQL查询都被转储到您的控制台,它只会停止该命令的返回值被打印出来... - opsidao
1
虽然它不能回答这个问题,但对于避免重复结果很有用。 - Rutger
1
返回nil只会阻止结果的返回,但并不能阻止实际的SQL被记录到控制台。最初的问题是如何抑制记录SQL。 - jeremywoertink
显示剩余3条评论

4
在Rails 3.2中,设置
config.logger.level = Logger::INFO

对于我来说,这个方法可以很好地关闭SQL输出。


这仍会将 SQL 输出记录到日志文件中吗? - Joshua Pinter

-2
我看到你已经得到了你需要的答案,虽然我想向你推荐 'quiet assets' gem,大部分的日志数据将会是资源编译和包含,这个 gem 将去除这些信息但仍然输出查询和数据行为。
祝你玩得开心。

1
问题是关于输出到控制台,而不是日志文件。 - Roger Ertesvag

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