はじめに #
echoロギングでは、ログに必要な「時間、どのコードで、どの行か?」が全く分からない。 さすがに困るけどshellだから最低限の労力でロギングできるようにしたいので、これを満たせるレベルlogging関数を用意する。
infoとerrorのlogging関数 #
info <msg>
: echoの代わりに使用。日付とscriptの場所を出力してくれる。error <msg>
: infoと同じくlogを出力 + exit 1でscript自体を停止
#!/bin/bash
error() {
local fname=${BASH_SOURCE[1]##*/}
echo -e "$(date '+%Y-%m-%dT%H:%M:%S')[ERROR] (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $@" 1>&2
exit 1
}
info() {
local fname=${BASH_SOURCE[1]##*/}
echo -e "$(date '+%Y-%m-%dT%H:%M:%S')[INFO] (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $@"
}
info "info-dayo"
# >> 2023-06-23T05:52:00[INFO] (sample.sh:14:main) info-dayo
error "error-dayo"
# >> 2023-06-23T05:52:00[ERROR] (sample.sh:16:main) error-dayo
shでは使用できないので注意
おわりに #
通常のcodeの上に2個関数をコピペするだけで大分使いやすくなる。