トップ «前の日記(2014/05/13 (火) ) 最新 次の日記(2014/05/15 (木) )» 編集 RSS feed

HsbtDiary


2014/05/14 (水) [長年日記]

[ruby] Ruby の Logger::Application を知った

毎週水曜に Ruby の stdlib を写経しながら、何だこの変数名は~とか、こんなメソッドが~みたいなことを有志でやっているんだけど、今日は logger.rb にある Logger::Application というのがあるというのを知った。

https://github.com/ruby/ruby/blob/trunk/lib/logger.rb#L775

要は rake タスクとかでよくやる "start foo", "end foo" みたいなロギングを良い感じにやってくれる奴らしい。応用するとこういうロガーを書ける。

require 'logger'
 
class RakeExcecuter < Logger::Application
  def initialize(tasklist = [])
    super
    @tasklist = tasklist
  end
 
  private
  def run
    @tasklist.each do |task|
      log(Logger::DEBUG, "#{task} start")
      # Rake::Task[task].invoke
      log(Logger::DEBUG, "#{task} end")
    end
  end
end
 
RakeExcecuter.new(%w(db:migrate db:seed)).start

rails で lib/tasks の下にあるバッチっぽい奴だと、Rails.logger とは分離して使いたいので、片っ端から Logger.new して start/end みたいなことをやっていたけど、RakeExecuter みたいのを挟めば一々生成しなくて良いとのこと。便利っぽい。

ただ、これが Application かと言われると、う~んとなるので名前は変えたいよね。