ActiveRecordでSQLのログを取る

2014-02-25T00:00:00+00:00 Ruby

※Railsで使う場合だと設定方法異なるらしい。その件は今回はノータッチで

require "active_record"
require "./sample"

logger = Logger.new(File.open("sql.log", File::CREAT | File::WRONLY | File::APPEND))

ActiveSupport::LogSubscriber.colorize_logging = false

ActiveRecord::Base.establish_connection(
  :adapter  => "mysql2",
  :host     => "127.0.0.1",
  :username => "user",
  :password => "pass",
  :database => "sample"
)
ActiveRecord::Base.logger = logger

p Sample.find(1)

デフォだとログにcolorizedされる模様なのだけど、ActiveSupport::LogSubscriber.colorize_loggingをfalseにすれば良いらしい。でそれを指定するのと指定しない場合で出力されるログは

D, [2014-02-25T16:00:47.256993 #7570] DEBUG -- :   Sample Load (0.2ms)  SELECT `sample`.* FROM `sample` WHERE `sample`.`id` = 1 LIMIT 1
D, [2014-02-25T16:15:43.946629 #7942] DEBUG -- :   Sample Load (0.2ms)  SELECT `sample`.* FROM `sample` WHERE `sample`.`id` = 1 LIMIT 1

的な感じらしい。1個目がcolorizedされたやつで2つ目がそれを無効にした場合

LoadMoreListView Chrome拡張のブラウザアクションなアイコンを回転させる技