Blog

[ruby] スクリプトの実行結果をログファイルに書く

Ruby で書いたスクリプトの実行結果をログファイルに残したい。しかし tee とかでトルのもめんどくさい。 そんな時は ruby の STDOUT/STDERR をロガーのパイプに置き換えてしまえばよろしい。 ついでに、どの行がいつ出たかがわかりやすいようにタイムスタンプもつけて欲しい。

そんな時ってありますよね。そんな時に使えるスニペットが以下になります。

logfile = Time.now.strftime("#{LOG_BASE}/%Y-%m-%d.%H%M%S.log")
log_fh = open("| /usr/local/bin/tai64n | tee -a '#{logfile}' | /usr/local/bin/tai64nlocal", 'a') 
log_fh.sync = true
$stderr.reopen(log_fh)
$stdout.reopen(log_fh)

本当は、もっと ruby らしい解法があると思うけど、

という条件を満たすために、UNIX 的解法で済ませた。