読者です 読者をやめる 読者になる 読者になる

ログってなんぼ

日々のメモです

bash:標準出力も標準エラーもログに出力

基本的なことではあるんですが、障害対応時などの一刻を争う調査などで結構ミスりやすいのでメモしときます。

というかイザ障害発生時、落ちたバッチのcronjob見てみるとエラーがロギングされてなかったなんてことが多々有ります・・・

test.sh

#!/bin/sh

echo "foo"
cat ./sonna_file_naiyo.txt
echo "bar"

teeでロギングしちゃうよ!

$ sh ./test.sh | tee test.log
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

logの中身を見てみるよ!

$ cat ./test.log 
foo
bar

(´・ω・`) 標準エラー出力がファイルに吐かれてないお・・・なぜだお・・・

標準出力&標準エラーどちらもロギングする場合

標準エラー出力を標準出力にリダイレクトします

$ sh ./test.sh 2>&1 | tee test.log
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

確認するよ!

$ cat ./test.log 
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

(∩´∀`)∩ワーイ

teeではなくファイルへのリダイレクトを使う場合

$ sh ./test.sh > test.log 2>&1

$ cat test.log 
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

リダイレクトを指定する場所に注意してくださいね。

指定の順番や位置を間違えると

意図しない状況になりますので注意です

$ sh ./test.sh | tee test.log 2>&1
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

$ cat test.log 
foo
bar
$ sh ./test.sh 2>&1 > test.log
cat: ./sonna_file_naiyo.txt: No such file or directory

$ cat test.log 
foo
bar

(´・ω・`)忘れやすいんで自分も注意してます

Qiitaにも同様のポストをしています。 tee - bash:標準出力も標準エラーもログに出力 - Qiita