智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

Ruby on Rails日志查看的实用技巧分享

开发中遇到问题,先看ref="/tag/415/" style="color:#E3A3CF;font-weight:bold;">日志

Ruby on Rails 开发时,最常打交道的除了代码就是日志了。比如用户提交表单后页面卡住,或者接口返回 500 错误,这时候打开日志文件,往往一眼就能发现问题所在。

Rails 默认会把日志输出到 log/ 目录下,不同环境对应不同文件,最常见的就是 development.logproduction.log。开发时直接看 log/development.log 就行。

快速定位请求

每次发起一个请求,Rails 都会在日志里记录详细信息。比如你访问 /users/123,日志会显示:

Started GET "/users/123" for 127.0.0.1 at 2024-04-05 10:20:30 +0800
Processing by UsersController#show as HTML
  Parameters: {"id"=>"123"}
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 123], ["LIMIT", 1]]
Completed 200 OK in 12ms (Views: 8.1ms | ActiveRecord: 0.5ms)

从这段日志能看出:请求路径、控制器动作、传入参数、数据库查询语句,以及响应时间和状态。如果这里出现异常,比如抛出 NoMethodError,错误堆栈也会紧跟着打印出来,直接告诉你哪一行代码出了问题。

调整日志级别

有时候日志太多,干扰信息太多。可以在 config/environments/development.rb 中设置日志级别:

config.log_level = :info

可选值有 :debug:info:warn:error:fatal。开发时用 :debug 没问题,生产环境建议设成 :warn 或更高,避免磁盘被写满。

在日志中添加自定义信息

想追踪某个逻辑分支,可以直接在代码里写日志:

class OrdersController < ApplicationController
  def create
    logger.debug "创建订单,用户 ID: #{current_user.id}"
    # ...
    if order.save
      logger.info "订单保存成功,金额: #{order.amount}"
    end
  end
end

这样在日志里就能看到自己的标记,排查流程问题特别有用。比如发现“订单保存成功”没打出来,那问题肯定出在 save 前面。

生产环境怎么看日志

线上出问题不能直接进服务器翻文件。可以用 tail -f 实时查看:

tail -f log/production.log

或者配合 grep 过滤特定请求:

grep "/api/v1/payment" log/production.log | tail -20

现在很多项目跑在 Docker 或 Kubernetes 上,就得用 docker logs 或平台自带的日志系统,但本质还是读那些文本输出。

日志就像程序的行车记录仪,只要养成随手看的习惯,大部分问题都不用打断点也能快速解决。