bash用ロガースクリプト
単純にechoでメッセージ表示するだけでも良かったのだけど、環境変数でログレベルを切り替えて表示出来るように実装してみた。DEBUG、INFO、WARN、ERRORのみ指定出来、それ以外だとINFO扱いにする。
logger.sh
# LOG_LEVELの設定 declare -A _LOG_LEVEL _LOG_LEVEL[DEBUG]=10 _LOG_LEVEL[INFO]=30 _LOG_LEVEL[WARN]=40 _LOG_LEVEL[ERROR]=50 # LOG_LEVELが指定されていた場合はそのログレベルを使用する # LOG_LEVELが指定されていなかった場合はINFOを指定 if [ "${LOG_LEVEL}" != "" ]; then LOG_LEVEL=${_LOG_LEVEL[${LOG_LEVEL}]} fi if [ "${LOG_LEVEL}" = "" ]; then LOG_LEVEL=${_LOG_LEVEL[INFO]} fi function log_impl() { local target=$1;shift; local level=$1;shift; if [ ${_LOG_LEVEL[${level}]} -ge ${target} ]; then printf "$(date +'%Y/%m/%d %T') %-5s $@\n" ${level} fi } function log_debug() { log_impl ${LOG_LEVEL} DEBUG "$@" } function log_info() { log_impl ${LOG_LEVEL} INFO "$@" } function log_warn() { log_impl ${LOG_LEVEL} WARN "$@" } function log_error() { log_impl ${LOG_LEVEL} ERROR "$@" }
log_sample.sh
#!/usr/bin/env bash source logger.sh log_debug "HOGE" log_info "HOGE" log_warn "HOGE" log_error "HOGE"
実行結果
/Users/junya/develop/bash_sample% export LOG_LEVEL=DEBUG;./log_sample.sh 2013/10/09 20:51:27 DEBUG HOGE 2013/10/09 20:51:27 INFO HOGE 2013/10/09 20:51:27 WARN HOGE 2013/10/09 20:51:27 ERROR HOGE /Users/junya/develop/bash_sample% export LOG_LEVEL=DEBUG;./log_sample.sh 2013/10/09 20:54:30 DEBUG HOGE 2013/10/09 20:54:30 INFO HOGE 2013/10/09 20:54:30 WARN HOGE 2013/10/09 20:54:30 ERROR HOGE /Users/junya/develop/bash_sample% export LOG_LEVEL=INFO;./log_sample.sh 2013/10/09 20:54:37 INFO HOGE 2013/10/09 20:54:37 WARN HOGE 2013/10/09 20:54:37 ERROR HOGE /Users/junya/develop/bash_sample% export LOG_LEVEL=WARN;./log_sample.sh 2013/10/09 20:54:42 WARN HOGE 2013/10/09 20:54:42 ERROR HOGE /Users/junya/develop/bash_sample% export LOG_LEVEL=ERROR;./log_sample.sh 2013/10/09 20:54:49 ERROR HOGE /Users/junya/develop/bash_sample%