BASH Tips&Tricks #0009: Простенький модуль для логирования

BASH
Программа, ведущая подробные логи своей работы, не только удобна в отладке, но и зело приятна в сопровождении, поскольку по сути является самодокументируемой даже без комментариев.
В BASH-скриптах часто хочется вести журналирование в простом и понятном формате, но не всегда есть под рукой соотв. функции.
Собственно, именно для тех, у кого их нет, предлагаю следующий (почти совсем) немудрёный код:


declare -A S2L
c=0
for svr in fatal error warn info debug; do
 S2L[$svr]=$((c++))
done

log_open () {
 local logFile="$1"
 [[ -f $logFile && ! -w $logFile ]] && return 1
 exec 4>>$logFile
 return 0
}

log_ () {
 local SVR="${1,,}"; shift
 local dbgLevel=${DEBUG_LEVEL,,}
 [[ ${S2L[$SVR]} ]] || return 1 
 [[ $dbgLevel && ! $dbgLevel =~ ^[0-9]+$ && ${S2L[$dbgLevel]} ]] && \
  dbgLevel=${S2L[$dbgLevel]}
 (( ${dbgLevel:-1} >= ${S2L[$SVR]} )) && \
  echo "$(date +%Y%m%d%H%M%S): ${slf:-${0##*/}}[$$]: ${SVR^^}: $@" >&4
 return 0
}

for svr in ${!S2L[@]}; do
 eval "
${svr}_ () {
 log_ $svr \$@
 return $?
}"
done


Сохраните его в файл, подключите source PATH_TO_FILE и пользуйтесь на здоровье!
Пример:

DEBUG_LEVEL=INFO
source /opt/Scripts/functions/debug.inc
log_open /var/log/my_prog/logfile
if SOMETHING; then
 error_ 'SOMETHING happens'
fi
debug_ 'Dreaming about happy holidays...'
warn_ '2 days left :('


UPD: Актуальную версию данного модуля Вы можете найти и скачать на GitHub'е:
github.com/DRVTiny/bash4-debug-infra

3 комментария

avatar
Тут не должно быть так?
...
    dbgLevel=${S2L[$dbgLevel]}
...
avatar
Да, совершенно верно, поправил!

В настоящем отдадочном модуле ( ссылка на github ) уже давно нет кода, даже похожего на этот, он уже прогрессировал до записи в несколько файлов сразу, хотя пока не имеет фильтрации, позволявшей бы сообщениям с теми или иными признаками уходить в разные файлы (как это делает syslog).
avatar
Вырос модуль. Мне хватает минимального набора, добавил только возможность писать на STDIN, в остальном оставил как есть. Всё просто и не слишком усложнено.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.