#!/usr/local/bin/bash log.start() { This=$(which $0) this=$(basename $This) if [ "$this" = "${BASH_SOURCE[0]##*/}" ]; then echo "starting ${BASH_SOURCE[0]}" else echo "sourcing ${BASH_SOURCE[0]} from $current" fi if [ -z "$LOG_LEVEL" ]; then log.init source init success.log "log initialized on level $LOG_LEVEL" source call "$@" else #shellcheck source=/dev/null #source ./config # { # set +x # } 2>/dev/null source "$CONFIG" source call "$@" #LOG_LEVEL_ARRAY=$( IFS=:; printf '%s' "${ENUM_LOG_LEVEL}" ) LOG_LEVEL_ARRAY=($(loop $ENUM_LOG_LEVEL : r ' ' pipe)) export _SET_="-x" echo LOG_LEVEL_ARRAY: "${LOG_LEVEL_ARRAY[@]}" echo LOG_LEVEL: "$LOG_LEVEL" echo "current log level is ${LOG_LEVEL_ARRAY[$LOG_LEVEL]}" if [ -n "$1" ]; then local cmd=$1 shift log.$cmd "$@" fi fi } log.init() { # export PS4='\e[90m+${LINENO} in ${#BASH_SOURCE[@]}>${FUNCNAME[0]}:${BASH_SOURCE[@]##*/} \e[0m' #set -x if [ -n "$LOG_LEVEL" ]; then warn.log "log already inititalized" debug.log "debug: ENUM_LOG_LEVEL=$ENUM_LOG_LEVEL" debug.log "debug: LOG_LEVEL_ARRAY=(${LOG_LEVEL_ARRAY[*]})" LOG_LEVEL_ARRAY=($(loop $ENUM_LOG_LEVEL : r ' ' pipe)) # LOG_LEVEL_ARRAY=$( IFS=:; printf '%s' "${ENUM_LOG_LEVEL}" ) log.status return 0 fi LOG_LEVEL_ARRAY=(SILENT ERROR WARN USER INFO DEBUG) ENUM_LOG_LEVEL=$( printf '%s:' "${LOG_LEVEL_ARRAY[@]}" ) export ENUM_LOG_LEVEL export LOG_LEVEL=5 source config save log.status } log.status() { echo "current log level is ${LOG_LEVEL_ARRAY[$LOG_LEVEL]}" echo "debug: ENUM_LOG_LEVEL=$ENUM_LOG_LEVEL" echo "debug: LOG_LEVEL_ARRAY=(${LOG_LEVEL_ARRAY[*]})" } log.level() { export LOG_LEVEL=$1 cut -d: -f $(($LOG_LEVEL+1)) <(echo $ENUM_LOG_LEVEL) config save } log.debug() { echo -e "- $@" } log.start "$@"