summaryrefslogtreecommitdiff
path: root/showlog
blob: 477fe75649efd0b6c3ecf3b065068af86c080e6e (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.12 2007-10-23 21:14:51 jonas Exp $
  7. #
  8. # Show topic-specific log entries
  9. #
  10. set -e
  11. usage() {
  12. echo "Usage: $(basename $0) ftp|web|weberror|websuexec|mail|system [<keyword> [<keyword>...]]"
  13. exit 1
  14. }
  15. exit1() {
  16. echo "Error: $1"
  17. echo "Exiting..."
  18. exit 1
  19. }
  20. cat_logs() {
  21. rootdir="$1"
  22. pattern="$2"
  23. howmany="${3:-2}"
  24. if [ "$howmany" != "all" ]; then
  25. files="$(find $rootdir -mindepth 1 -maxdepth 1 -regextype posix-egrep -regex "$pattern" -type f -follow | sort -nr | tail -n "$howmany")"
  26. else
  27. files="$(find $rootdir -mindepth 1 -maxdepth 1 -regextype posix-egrep -regex "$pattern" -type f -follow | sort -nr)"
  28. fi
  29. for file in $files; do
  30. case $file in
  31. *.gz)
  32. zcat $file;;
  33. *.bz2)
  34. bzcat $file;;
  35. *)
  36. cat $file;;
  37. esac
  38. done
  39. }
  40. tail_history="${tail_history:-500}"
  41. target=$1
  42. shift || exit1 "Missing argument"
  43. case "$target" in
  44. ftp)
  45. log="xferlog"
  46. ;;
  47. web)
  48. logroot="/var/log/apache"
  49. log="access.log"
  50. ;;
  51. weberror|weberrors)
  52. logroot="/var/log/apache"
  53. log="error.log"
  54. ;;
  55. websuexec)
  56. logroot="/var/log/apache"
  57. log="suexec.log"
  58. ;;
  59. mail)
  60. log="mail.log"
  61. ;;
  62. system)
  63. log="syslog"
  64. ;;
  65. *)
  66. usage
  67. ;;
  68. esac
  69. case "$target" in
  70. ftp|mail|system)
  71. logroot="/var/log"
  72. ;;
  73. web|weberror|weberrors|websuexec)
  74. logroot="/var/log/apache"
  75. ;;
  76. *)
  77. usage
  78. exit1 "Undefined logroot for \"$target\""
  79. ;;
  80. esac
  81. case "$target" in
  82. ftp|web|weberror|weberrors|websuexec|mail|system)
  83. logpattern="$(printf '.*/%s(\.[[:digit:]]+(\.gz)?)?\n' "$log")"
  84. ;;
  85. *)
  86. exit1 "Undefined logpattern for \"$target\""
  87. ;;
  88. esac
  89. if [ $# -gt 0 ]; then
  90. grep_opts=""
  91. for keyword in $@; do
  92. grep_opts="$opts -e $keyword"
  93. done
  94. cat_logs "$logroot" "$logpattern" 7 | grep -i $grep_opts | tail -n $tail_history
  95. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log | grep -i $grep_opts
  96. else
  97. cat_logs "$logroot" "$logpattern" 7 | tail -n $tail_history
  98. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log
  99. fi