Я мог бы дать несколько советов по методам отладки, но вместо этого я предложу альтернативное решение, которое может удовлетворить ваши потребности:
class Tee
def initialize(a,b); @a,@b = a,b; end
def method_missing(m,*args,&b)
@a.send(m,*args,&b)
@b.send(m,*args,&b)
end
end
Этот класс более полезен, чем то, что вы пытались написать; он принимает 2 объекта и передает все вызовы методов (включая аргументы и блок) ОБА из них. Так что вы можете сделать что-то вроде:
tee = Tee.new(File.open("log","w"), $stdout)
tee.puts "Hello world AND log file!"