summaryrefslogtreecommitdiff
path: root/showlog
blob: 4ae38614fb8e453f05e932d4bc8fad034655d43f (plain)
  1. #!/bin/sh
  2. #
  3. # /usr/local/sbin/showlog
  4. # Copyright 2002-2006 Jonas Smedegaard <dr@jones.dk>
  5. #
  6. # $Id: showlog,v 1.8 2006-10-27 12:34:26 jonas Exp $
  7. #
  8. # Show topic-specific log entries
  9. #
  10. # halt on errors (NB! this is a bashism...)
  11. set -e
  12. usage() {
  13. echo "Usage: $(basename $0) ftp|web|weberror|websuexec|mail|system [<keyword> [<keyword>...]]"
  14. exit 1
  15. }
  16. exit1() {
  17. echo "Error: $1"
  18. echo "Exiting..."
  19. exit 1
  20. }
  21. cat_logs() {
  22. rootdir=$1
  23. shift
  24. patterns=$@
  25. for pattern in $patterns; do
  26. for file in `find $rootdir -mindepth 1 -maxdepth 1 -name "$pattern" -type f -follow | sort`; do
  27. case $pattern in
  28. *.gz)
  29. zcat $file;;
  30. *.bz2)
  31. bzcat $file;;
  32. *)
  33. cat $file;;
  34. esac
  35. done
  36. done
  37. }
  38. tail_history="50"
  39. target=$1
  40. shift || exit1 "Missing argument"
  41. case "$target" in
  42. ftp)
  43. log="xferlog"
  44. ;;
  45. web)
  46. logroot="/var/log/apache"
  47. log="access.log"
  48. ;;
  49. weberror|weberrors)
  50. logroot="/var/log/apache"
  51. log="error.log"
  52. ;;
  53. websuexec)
  54. logroot="/var/log/apache"
  55. log="suexec.log"
  56. ;;
  57. mail)
  58. log="mail.log"
  59. ;;
  60. system)
  61. log="syslog"
  62. ;;
  63. *)
  64. usage
  65. ;;
  66. esac
  67. case "$target" in
  68. ftp|mail|system)
  69. logroot="/var/log"
  70. ;;
  71. web|weberror|weberrors|websuexec)
  72. logroot="/var/log/apache"
  73. ;;
  74. *)
  75. usage
  76. exit1 "Undefined logroot for \"$target\""
  77. ;;
  78. esac
  79. case "$target" in
  80. ftp|web|weberror|weberrors|websuexec|mail|system)
  81. logpatterns="$log.? $log"
  82. # logpatterns="$log.??.gz $log.?.gz $log.? $log"
  83. ;;
  84. *)
  85. exit1 "Undefined logpattern for \"$target\""
  86. ;;
  87. esac
  88. if [ $# -gt 0 ]; then
  89. grep_opts=""
  90. for keyword in $@; do
  91. grep_opts="$opts -e $keyword"
  92. done
  93. cat_logs $logroot $logpatterns | grep -i $grep_opts | tail -n $tail_history
  94. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log | grep -i $grep_opts
  95. else
  96. cat_logs $logroot $logpatterns | tail -n $tail_history
  97. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log
  98. fi