lib/update.log
author Tero Marttila <terom@paivola.fi>
Sun, 22 Dec 2013 15:33:32 +0200
changeset 98 a3734856e0fa
parent 90 5b33ccac38ad
permissions -rw-r--r--
use hosts/dhcp/%** to create dhcp hosts configs
#!/bin/bash
# vim: set ft=sh :
#
# Logging output

# Output message to stderr.
function log_msg {
    echo "$*" >&2
}

# Output message to stderr, optionally with given color, if TTY.
function log_color {
    local code=$1; shift

    if [ $IS_TTY ]; then
        echo $'\e['${code}'m'"$*"$'\e[00m' >&2
    else
        echo "$*" >&2
    fi
}

## Log at various log-levels
# plain
function log {
    [ $LOG          ] && log_msg            "$*"            || true
}

function log_error {
    [ $LOG_ERROR    ] && log_color '31'     "$*"            || true
}

function log_warn {
    [ $LOG_WARN     ] && log_color '33'     "$*"            || true
}

function log_force {
    [ $LOG_FORCE    ] && log_color '2;33'   "  $*"          || true
}

function log_update {
    [ $LOG_UPDATE   ] && log_color '36'     "  $*"          || true
}

function log_check {
    [ $LOG_UPDATE   ] && log_color '37'     "  $*"          || true
}

function log_noop {
    [ $LOG_NOOP     ] && log_color '2;34'   "  $*"          || true
}

function log_skip {
    [ $LOG_SKIP     ] && log_color '1;34'   "  $*"          || true
}

function log_debug {
    [ $LOG_DEBUG    ] && log_color '32'     "    $*"        || true
}

function log_cmd {
    [ $LOG_CMD      ] && log_color '35'     "        \$ $*" || true
}

# Output stacktrace, broken.
function log_stack {
    local level=1

    while info=$(caller $level); do
        echo $info | read line sub file

        log_msg "$file:$lineno $sub()"

        level=$(($level + 1))
    done
}

# Output calling function's name.
function func_caller {
    caller 1 | cut -d ' ' -f 2
}

### High-level logging output
# Log with func_caller at log_debug
function debug {
    printf -v prefix "%s" $(func_caller)

    log_debug "$prefix: $*"
}

function warn {
    log_warn "$(func_caller): $*"
}

# Log with func_caller at log_error and exit, intended for internal errors...
function fail {
    log_error "$(func_caller): $*"

    exit 2
}

# Log at log_error and exit
function die {
    log_error "$*"
    exit 1
}