Not a member of gistpad yet?
Sign Up,
it unlocks many cool features!
- #!/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
RAW Gist Data
Copied
