在Rails 4中如何在日志中显示SQL查询

24

我正在使用Ruby 2.1和Thin 1.6.2在Ubuntu 14.04上,通过我的终端“Terminator”和我的Shell“Fish Shell”来使用Rails 4.0.4。

当我以开发模式启动我的Rails服务器时,在日志中我没有SQL查询,只加载JS和HTML文件。

我正在寻找类似于这样的内容:

User Load (3.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 ORDER BY "users"."id" ASC LIMIT 1
(2.0ms)  SELECT COUNT(*) FROM "users" WHERE (driver_register_state_cd = -2)

默认情况下,在生产模式下启动Rails时,您将看不到它。请尝试在开发模式下启动它。 - canoe
3个回答

43

rails控制台不会将日志写入日志文件,但您可以非常容易地实现它,例如,如果您在启动rails控制台后执行以下操作

ActiveRecord::Base.logger = Logger.new STDOUT

Rails 会将所有的 SQL 语句记录到标准输出(stdout)中,因此可以在终端中进行查看。由于 Logger.new 方法接受任何流(stream)作为第一个参数,所以你也可以让它直接写入到 Rails 的 development.log 文件中:

ActiveRecord::Base.logger = Logger.new File.open('log/development.log', 'a')

我忘了提到我已经处于开发模式了... 一个 gem 能让查询在日志中消失吗?因为我没有触碰环境配置文件... - user1479978
你想让Rails在哪里显示SQL查询?是在你的本地桌面还是服务器上?如果是服务器,那么是哪个服务器? - jimagic
我已经更新了答案,请按照它来操作。如果解决了你的问题,请标记为已解决。 - jimagic
谢谢Jack!就这样! - user1479978
2
这并没有解决我的问题。即使按照你说的做了SQL查询,仍然没有显示出来。 - JonatasTeixeira
显示剩余2条评论

7

在 config/environments/development.rb 中将 config.log_level 设为 :debug,然后重新启动本地服务器或控制台。

 config.log_level = :debug

2
开发模式下的默认日志级别为:debug。因此,此条目不会更改任何内容。 - Tibor Nagy

6

我通过创建初始化文件得到了想要的结果:

# initializers/sql_logging.rb
ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT)

这似乎还可以避免日志记录中出现丑陋的时间戳。

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