63 lines
1.2 KiB
Bash
63 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Write to log
|
|
wrlog() {
|
|
echo "$1" >>"${LOG_FILE:?}"
|
|
}
|
|
|
|
# Write to stdout/stderr and log
|
|
echlog() {
|
|
local dt
|
|
dt="$(date +"%Y-%m-%dT%H:%M:%S")"
|
|
|
|
if [ -z "$1" ] && [ -z "$2" ]; then
|
|
echo ""
|
|
wrlog ""
|
|
elif [ -n "$1" ]; then
|
|
echo "$dt $1"
|
|
wrlog "$dt $1"
|
|
elif [ -n "$2" ]; then
|
|
echo "$dt $2" 1>&2
|
|
wrlog "$dt $2"
|
|
fi
|
|
}
|
|
|
|
# Write to stderr
|
|
errlog() {
|
|
echlog "" "$1"
|
|
}
|
|
|
|
# Rotate the log file
|
|
# TODO: Implement support for multiple rollovers and bz2 compression
|
|
rotlog() {
|
|
local filesize maxsize="${1:-10000000}"
|
|
|
|
if ! [ -f "$LOG_FILE" ]; then
|
|
echlog "File doesn't exist: '$LOG_FILE'"
|
|
return 0
|
|
fi
|
|
|
|
filesize="$(stat -c%s "$LOG_FILE")"
|
|
|
|
if ((filesize > maxsize)); then
|
|
echlog "Rotating log ($filesize > $maxsize)"
|
|
[ -f "$LOG_FILE.0" ] && rm "$LOG_FILE.0"
|
|
mv "$LOG_FILE" "$LOG_FILE.0"
|
|
fi
|
|
}
|
|
|
|
# Echo $1 and exit with code $2
|
|
echxit() {
|
|
if [ "$2" -eq 0 ]; then
|
|
echlog "$1"
|
|
exit "$2"
|
|
elif [ "$2" -gt 0 ]; then
|
|
errlog "$1"
|
|
exit "$2"
|
|
fi
|
|
|
|
errlog "$1"
|
|
errlog "Invalid exit code specified to echxit"
|
|
exit 255
|
|
}
|