created: 2022-02-23T08:02:39.000Z

bashで{標準,エラー}出力にタイムスタンプをつける

スクリプトの先頭でこんな感じで exec をしておけばよい。

function addtimestamp() {
    while IFS= read -r line; do
        printf '%s %s\n' "[$(date +"%Y-%m-%d %H:%M:%S")]" "$line";
    done
}
readonly scriptname=$(basename ${0%.sh})
exec 1> >(addtimestamp | tee -a "/tmp/$scriptname-stdout.log")
exec 2> >(addtimestamp | tee -a "/tmp/$scriptname-stderr.log")

参考

ユーザーの問題解決とプロダクトの成功を導く エンジニアのためのドキュメントライティング
[ad] ユーザーの問題解決とプロダクトの成功を導く エンジニアのためのドキュメントライティング
ジャレッド・バーティ, ザッカリー・サラ・コ―ライセン (単行本)