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%