Rails生产环境日志如何输出数据库查询SQL及执行时间?
解决Rails生产环境输出详细SQL查询及执行时间的问题
没问题,我帮你搞定这个问题——要在生产日志里输出像开发控制台那样的详细SQL语句(包括执行时间、绑定参数),其实只需要调整Rails的环境配置就行,下面是具体步骤:
一、修改生产环境配置文件
Rails默认在生产环境下会简化日志输出,只统计总ActiveRecord耗时,我们需要打开详细查询日志的开关:
- 打开
config/environments/production.rb文件 - 添加或修改以下配置:
# 临时将日志级别调到debug(排查完成后记得改回:info,避免日志量过大) config.log_level = :debug # 开启ActiveRecord详细查询日志,会输出每条SQL的执行时间、绑定参数 config.active_record.verbose_query_logs = true # 确保ActiveRecord的日志输出到应用主日志(有些环境可能需要单独指定) ActiveRecord::Base.logger = Rails.logger
二、生效配置并验证
- 重启你的Rails生产服务器(比如
passenger restart、puma restart或者容器重启) - 之后访问站点,查看
log/production.log,就能看到类似开发环境的SQL日志了:
FooterLink Load (1.1ms) SELECT "navigation_links".* FROM "navigation_links" WHERE "navigation_links"."location" = $1 AND "navigation_links"."column" = $2 [["location", 0], ["column", 3]]
三、实时查看查询日志
如果你想实时监控这些SQL查询,可以在服务器上用命令行工具:
tail -f log/production.log
这个命令会持续输出日志的最新内容,方便你实时观察慢查询。
注意事项
- 性能与日志量:打开
:debug级别日志会大幅增加日志体积,排查完问题后一定要把config.log_level改回默认的:info,避免占用过多磁盘空间。 - 部署环境适配:如果你的应用部署在像Heroku这样的平台,日志是通过stdout输出的,上述配置依然有效,你可以通过平台的日志查看工具(比如
heroku logs -t)实时查看。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

