Ruby ロガーのログをファイルだけでなく標準出力にも出力するにはどうすればよいですか?
概要
ロガーのティー機能のようなもの。
解決策
複数の IO オブジェクトに書き込む擬似 IO クラスを作成できます。何かのようなもの:
class MultiIO
def initialize(*targets)
@targets = targets
end
def write(*args)
@targets.each {|t| t.write(*args)}
end
def close
@targets.each(&:close)
end
end
次に、それをログ ファイルとして設定します。
log_file = File.open("log/debug.log", "a")
Logger.new MultiIO.new(STDOUT, log_file)
Logger が MultiIO オブジェクトを呼び出すたびに、STDOUT とログ ファイルの両方に書き込みます。
編集: インターフェイスの残りの部分を理解しました。ログデバイスは書き込みとクローズに応答する必要があります (Put ではありません)。 MultiIO がそれらに応答し、実際の IO オブジェクトにプロキシする限り、これは機能するはずです。