#!/bin/bash
mylogger() {
local log_file="$1"
local lock_file="$log_file.lock"
local LOG_FD
local line
local logbuffer=()
local counter=0
local buffer_size=1000
trap "mylog_flush $log_file $lock_file" EXIT INT HUP TERM
while IFS= read -r line ; do
logbuffer+=("$line")
((counter++))
if [ $counter -ge $buffer_size ] ; then
mylog_flush "$log_file" "$lock_file"
fi
done
mylog_flush "$log_file" "$lock_file"
}
mylog_flush() {
local log_file="$1"
local lock_file="$2"
[ -z "$counter" ] && return
# $logfile bei Bedarf oeffnen
[ -n "$LOG_FD" ] || exec {LOG_FD}<>$lock_file
dbg "logbuffer flush, logbuffer_count: ${#logbuffer} counter: ${counter}"
local i
if flock --exclusive --timeout 10 $LOG_FD ;then
for((i=0;i<$counter;i++));do
dbg "writing line >${logbuffer[$i]}< ..."
echo "${logbuffer[$i]}" >>$log_file
done
logbuffer=()
counter=0
rm -f $lock_file
flock --unlock $LOG_FD
fi
}
dbg() {
# Debug ausgabe am Bildschirm
if [ "$DEBUG" == "1" ] ;then
echo "DEBUG: $*" >&2
fi
}
machwas() {
local i=0
for((x=1;x<=10;x++)) ; do
for name in anton peter "" susanne fritz mira markus tina ;do
echo "$name"
done
done
}
# --- Hauptprogramm ---
declare -x DEBUG=1
# - mehrere logger definieren -
#
logger_data() { mylogger data.log ; }
logger_extra() { mylogger extra.log ; }
machwas | logger_data
machwas | logger_extra