#!/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