要件は以下

  • 標準出力を通常通り出力する
  • 標準出力もLoggerでログファイルに出力されるようにする
  • Loggerによる出力もログファイルに出力されるようにする

https://github.com/m4i/teeを使うことでできるっぽいのでやってみた

require "tee"
require "logger"

tee = Tee.open("build.log")
$stdout = tee
logger = Logger.new(tee)
logger.info "hoge"
logger.debug "fuga"

puts "foobar"

という感じで実行してbuild.logを見てみると

I, [2025-06-18T16:57:34.895112 #6226]  INFO -- : hoge
D, [2025-06-18T16:57:34.895252 #6226] DEBUG -- : fuga
foobar

という普通にputsで出力された標準出力もログファイルに出力されている

とまあそういうのができないもんかねといろいろ見てたらこれ使うことでできるっぽそうなので(ry