#!/bin/bash # # /usr/local/sbin/showlog # Copyright 2002 Jonas Smedegaard # # $Id: showlog,v 1.6 2006-07-28 12:45:07 jonas Exp $ # # Show topic-specific log entries # # halt on errors (NB! this is a bashism...) set -e function usage() { echo "Usage: $(basename $0) ftp|web|weberror|websuexec|mail|system [ [...]]" exit 1 } function exit1() { echo "Error: $1" echo "Exiting..." exit 1 } function cat_logs() { rootdir=$1 shift patterns=$@ for pattern in $patterns; do for file in `find $rootdir -name "$pattern" -type f -mindepth 1 -maxdepth 1 -follow | sort`; do case $pattern in *.gz) zcat $file;; *.bz2) bzcat $file;; *) cat $file;; esac done done } tail_history="50" target=$1 shift || exit1 "Missing argument" case "$target" in ftp) log="xferlog" ;; web) logroot="/var/log/apache" log="access.log" ;; weberror|weberrors) logroot="/var/log/apache" log="error.log" ;; websuexec) logroot="/var/log/apache" log="suexec.log" ;; mail) log="mail.log" ;; system) log="syslog" ;; *) usage ;; esac case "$target" in ftp|mail|system) logroot="/var/log" ;; web|weberror|weberrors|websuexec) logroot="/var/log/apache" ;; *) usage exit1 "Undefined logroot for \"$target\"" ;; esac case "$target" in ftp|web|weberror|weberrors|websuexec|mail|system) logpatterns="$log.? $log" # logpatterns="$log.??.gz $log.?.gz $log.? $log" ;; *) exit1 "Undefined logpattern for \"$target\"" ;; esac if [ $# \> 0 ]; then grep_opts="" for keyword in $@; do grep_opts="$opts -e $keyword" done cat_logs $logroot $logpatterns | 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 # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log fi