diff options
-rwxr-xr-x | showlog | 40 |
1 files changed, 21 insertions, 19 deletions
@@ -3,7 +3,7 @@ # /usr/local/sbin/showlog # Copyright 2002-2006 Jonas Smedegaard <dr@jones.dk> # -# $Id: showlog,v 1.9 2006-10-27 12:35:11 jonas Exp $ +# $Id: showlog,v 1.10 2006-10-27 22:02:22 jonas Exp $ # # Show topic-specific log entries # @@ -22,21 +22,24 @@ exit1() { } cat_logs() { - rootdir=$1 - shift - patterns=$@ + rootdir="$1" + pattern="$2" + howmany="${3:-2}" - for pattern in $patterns; do - for file in `find $rootdir -mindepth 1 -maxdepth 1 -name "$pattern" -type f -follow | sort`; do - case $pattern in - *.gz) - zcat $file;; - *.bz2) - bzcat $file;; - *) - cat $file;; - esac - done + if [ "$howmany" != "all" ]; then + files="$(find $rootdir -mindepth 1 -maxdepth 1 -regextype posix-egrep -regex "$pattern" -type f -follow | sort -nr | tail -n "$howmany")" + else + files="$(find $rootdir -mindepth 1 -maxdepth 1 -regextype posix-egrep -regex "$pattern" -type f -follow | sort -nr)" + fi + for file in $files; do + case $file in + *.gz) + zcat $file;; + *.bz2) + bzcat $file;; + *) + cat $file;; + esac done } @@ -85,8 +88,7 @@ case "$target" in esac case "$target" in ftp|web|weberror|weberrors|websuexec|mail|system) - logpatterns="$log.? $log" -# logpatterns="$log.??.gz $log.?.gz $log.? $log" + logpattern="$(printf '.*/%s(\.[[:digit:]]+(\.gz)?)?\n' "$log")" ;; *) exit1 "Undefined logpattern for \"$target\"" @@ -98,9 +100,9 @@ if [ $# -gt 0 ]; then for keyword in $@; do grep_opts="$opts -e $keyword" done - cat_logs $logroot $logpatterns | grep -i $grep_opts | tail -n $tail_history + cat_logs "$logroot" "$logpattern" | grep -i $grep_opts | tail -n $tail_history # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log | grep -i $grep_opts else - cat_logs $logroot $logpatterns | tail -n $tail_history + cat_logs "$logroot" "$logpattern" | tail -n $tail_history # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log fi |