Implement a logger for messages
This commit is contained in:
parent
4a89089856
commit
e5bcd62c19
1 changed files with 43 additions and 7 deletions
50
rowbot
50
rowbot
|
@ -1,5 +1,36 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
###
|
||||||
|
# logger
|
||||||
|
###
|
||||||
|
|
||||||
|
declare -A levels=(
|
||||||
|
[debug]=1 [info]=2
|
||||||
|
[warn]=3 [error]=4
|
||||||
|
)
|
||||||
|
|
||||||
|
log() {
|
||||||
|
if [[ -v LEVEL ]] && (( levels[$level] <= levels[$LEVEL] )); then
|
||||||
|
printf "%s: $1\n" "${LEVEL^^}" "${@:2}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
debug() {
|
||||||
|
LEVEL=debug log "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
LEVEL=info log "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
warn() {
|
||||||
|
LEVEL=warn log "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
LEVEL=error log "$@"
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
# argument parser for parsing arguments
|
# argument parser for parsing arguments
|
||||||
##
|
##
|
||||||
|
@ -35,6 +66,7 @@ done
|
||||||
# default config
|
# default config
|
||||||
##
|
##
|
||||||
|
|
||||||
|
level=${opts[log-level]:-info}
|
||||||
server=${opts[server]:-irc.libera.chat}
|
server=${opts[server]:-irc.libera.chat}
|
||||||
tls=${opts[tls]:-no}
|
tls=${opts[tls]:-no}
|
||||||
|
|
||||||
|
@ -78,25 +110,29 @@ recv() {
|
||||||
###
|
###
|
||||||
|
|
||||||
while recv line; do
|
while recv line; do
|
||||||
params=( ) has_words=no orig_line=$line
|
params=( )
|
||||||
|
has_words=no
|
||||||
|
orig_line=$line
|
||||||
|
|
||||||
if [[ $line = :* ]]; then
|
if [[ ${line:0:1} = : ]]; then
|
||||||
src=${line%% *} src=${src#:}
|
src=${line%% *} src=${src#:}
|
||||||
line=${line#:"$src"} line=${line# }
|
line=${line#:"$src"} line=${line# }
|
||||||
from=${src%@*} ident=${from#*!}
|
from=${src%@*} ident=${from#*!}
|
||||||
from=${from%!*} host=${src#*@}
|
from=${from%!*} host=${src#*@}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmd=${line%% *} line=${line#"$cmd"} line=${line# }
|
cmd=${line%% *}
|
||||||
|
line=${line#"$cmd"}
|
||||||
|
line=${line# }
|
||||||
|
|
||||||
while [[ $line ]]; do
|
while [[ $line ]]; do
|
||||||
if [[ $line = :* ]]; then
|
if [[ ${line:0:1} = : ]]; then
|
||||||
params+=("${line:1}")
|
params+=("${line:1}")
|
||||||
line=""
|
line=""
|
||||||
has_words=yes
|
has_words=yes
|
||||||
else
|
else
|
||||||
params=${line%% *}
|
param=${line%% *}
|
||||||
params+=( "$param" )
|
params+=("$param")
|
||||||
line=${line#"$param"} line=${line# }
|
line=${line#"$param"} line=${line# }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -110,6 +146,6 @@ while recv line; do
|
||||||
if hash "on_${cmd^^}" 2>/dev/null; then
|
if hash "on_${cmd^^}" 2>/dev/null; then
|
||||||
"on_${cmd^^}"
|
"on_${cmd^^}"
|
||||||
else
|
else
|
||||||
declare -p line
|
warn "unhandled line: %s" "$orig_line"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in a new issue