✍️

【Rails】Rakeタスクでログを標準出力に出力する方法

2023/11/08に公開

はじめに

この記事では、RailsのRakeタスク内でクエリのログを標準出力に出力する方法について解説します。これにより、Rakeタスクの実行中に発行されるクエリをリアルタイムで確認することができます。

サンプルコード

namespace :query_log do
  desc "Output query logs to stdout"
  task output: :environment do
    # 以下を追加する
    ActiveRecord::Base.logger = Logger.new($stdout)
    Rails.logger.level = Logger::DEBUG

    # Rakeタスクの実行内容を記述します
    # ...

    # クエリログの設定を元に戻す(なくてもOK)
    ActiveRecord::Base.logger = nil
    Rails.logger.level = Logger::INFO
  end
end

コードの解説

ActiveRecord::Base.logger = Logger.new($stdout)

Active Recordのクエリログを標準出力に出力するための設定です。これにより、ActiveRecordのログが標準出力に出力されます。
ActiveRecord::Base.loggerは、Active Recordモデルで実行されるクエリやデータベース操作に関する情報を記録するためのロガーを表します。Logger.new($stdout)は、新しいロガーオブジェクトを作成し、その出力先を標準出力($stdout)に設定しています。

Rails.logger.level = Logger::DEBUG

RailsのログレベルをDEBUGに設定します。

https://docs.ruby-lang.org/ja/latest/library/logger.html

まとめ

この記事では、RailsのRakeタスク内でクエリのログを標準出力に出力し、リアルタイムでクエリの実行状況を確認する方法について紹介しました。クエリログを出力することにより、実行内容を把握し、デバッグしやすくなります。提供されたコードを使用して、自身のRailsプロジェクトでクエリログを活用してみてください!

参考

https://railsguides.jp/debugging_rails_applications.html

Discussion