毎週水曜に 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 かと言われると、う~んとなるので名前は変えたいよね。