解釈にあまり自信がありませんが、
「puts
等で表示される文字列をファイルに出力したい」という要望でしょうか?
それならば
rb
1$stdout = File.open("ログファイル")
2puts "これ以降出力がログファイルに変更されます"
3$stdout = STDOUT
4puts "戻ります"
ファイルと端末の両方に出力したい場合は
rb
1mirror = Object.new
2mirror.instance_eval{@ofile=open("ログファイル", "w:utf-8")}
3def mirror.write(str)
4 @ofile.write str
5 STDOUT.write str
6end
7$stdout = mirror
rb
1require 'logger'
2
3$logger = Logger.new("ログファイル")
4
5# logger
6%i[unknown fatal error warn info debug].each{|sev|
7 define_method(sev){|*arg, &proc| $logger.send(sev, *arg, &proc)}
8}
9
10def main
11 # テスト
12 info{ "block" }
13 unknown("unk")
14 fatal("fatal")
15 error("error")
16 warn("warn")
17 info("info")
18 debug("debug")
19
20 # 例外が発生した場合も記録される
21 raise "test"
22end
23
24main rescue fatal($!)
ちなみに、「log.info("")
」において
引数: ""
レシーバー: log
メソッド名: info
なので
引数にして出力する方法
ではなく「レシーバーを指定して出力する方法」かなと思います。