#!/bin/bash
#################################
# Simple logger script
#
# (c) Rosandi, 2008
#
[[ -z $LOGFILE ]] && LOGFILE=$HOME/LogFile
TMPF=/tmp/log-$$
trap "rm -f $TMPF" EXIT
logmod=
query=
LOGMSG=
if [[ ! -z $1 ]]; then
case $1 in
a|add) logmod=add ;;
v|view) logmod=view;query=$2;shift ;;
h|-h|help) logmod=help ;;
s|find|search) [[ -z $2 ]] && die;logmod=find;query=$2;shift ;;
f|file) [[ -z $2 ]] && die;LOGFILE=$2;shift ;;
esac
shift
LOGMSG=$@
else
logmod=add
fi
die() {
echo $@
exit 1
}
helptext() {
cat << eof
Console Logger tool
(c) Rosandi, 2008
Usage:
1) Adding new log entry:
log add 'your log text'
or
log <return>
type your log text
end with <ctrl-D>
2) viewing log-file
Display all entry: log view
Find log in a day: log view 'Day/Month/Year'
3) searching text inside logs
log find text
4) Ask for help: log help
eof
}
addlog() {
LOGMSG=$1
if [[ ! -f $LOGFILE ]]; then
read -p "Logfile $LOGFILE does not exist. Create new log? (y/N) " YN
[[ $YN != "y" ]] && return
fi
[[ -z $LOGFILE ]] && $LOGFILE=LogFile
if [[ -z $LOGMSG ]]; then
cat > $TMPF;LOGMSG=$(cat /tmp/log-$$)
fi
cat << endlog >> $LOGFILE
@ $(date +'%a %m/%d/%G %H:%M')
$LOGMSG
endlog
}
viewlog() {
[[ -f $LOGFILE ]] || die "Can not find file: $LOGFILE"
if [[ -z $1 ]]; then
awk '/^#/{next}/^@/{print "\033[1;31;40m"$0"\033[0m";next}
{print}' $LOGFILE
else
qdate=$(date --date="$*" +'%m/%d/%G') || die
echo
awk '/^#/{next}/^@/{t=($3=="'$qdate'")?1:0
if(t)print"\033[1;31;40m"$0"\033[0m"
next}t{print}' $LOGFILE
fi
}
findlog() {
[[ -f $LOGFILE ]] || die "Can not find file: $LOGFILE"
[[ -z $1 ]] && exit
awk 'BEGIN{d="";tx="";IGNORECASE=1;S="'$1'"}
/^#/{next}/^@/{if(match(tx,S))
{print"\033[1;31;40m"d"\033[0m"
gsub(S,"\033[0;36m&\033[0m",tx);print tx}
d=$0;tx="";next}{tx=tx""$0"\n"}
END{if(match(tx,/'$1'/)){print"\033[1;31;40m"d"\033[0m"
gsub(S,"\033[0;36m&\033[0m",tx);print tx}}' $LOGFILE
}
case $logmod in
add) addlog $LOGMSG ;;
view) viewlog $query ;;
find) findlog $query ;;
help) helptext ;;
esac
syntax highlighted by Code2HTML, v. 0.9.1