よく Rails で
class Hoge < ActiveRecord::Base
....
# logger
def my_log(text)
Logger.new(File.join(Rails.root, "/log/my_logger.log", "daily")).info text
end
end
などとやって,ログを出力させたりする場合がありますが,上記の場合だと毎回ファイルをオープンしてしまうので,そのコストは場合によっては馬鹿にならなくなります.
そこで
class Hoge < ActiveRecord::Base
....
# logger
def my_log(text)
@@my_logger ||= Logger.new(File.join(Rails.root, "/log/my_logger.log", "daily"))
@@my_logger.info text
end
end
として,クラス変数にキャッシュさせることで,その頻度を下げることができます.
一つ注意点としては @@logger を使わないこと.これは ActiveRecord や ActionMailer デフォルトのロガーになっているので,それを上書きしてしまいます.結構はまりやすい罠なので,ご注意を.
comments powered by Disqus