summaryrefslogtreecommitdiff
path: root/showlog
blob: d6701daeb4aebd53d8d794d53ec6d943e2353ecb (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|sms|smsbox|bearerbox|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. sms|smsbox)
  63. log="smsbox.log"
  64. ;;
  65. bearerbox)
  66. log="bearerbox.log"
  67. ;;
  68. system)
  69. log="syslog"
  70. ;;
  71. *)
  72. usage
  73. ;;
  74. esac
  75. case "$target" in
  76. ftp|mail|system)
  77. logroot="/var/log"
  78. ;;
  79. web|weberror|weberrors|websuexec)
  80. logroot="/var/log/apache"
  81. ;;
  82. sms|smsbox|bearerbox)
  83. logroot="/var/log/kannel"
  84. ;;
  85. *)
  86. usage
  87. exit1 "Undefined logroot for \"$target\""
  88. ;;
  89. esac
  90. case "$target" in
  91. ftp|web|weberror|weberrors|websuexec|mail|sms|smsbox|bearerbox|system)
  92. logpattern="$(printf '.*/%s(\.[[:digit:]]+(\.gz)?)?\n' "$log")"
  93. ;;
  94. *)
  95. exit1 "Undefined logpattern for \"$target\""
  96. ;;
  97. esac
  98. if [ $# -gt 0 ]; then
  99. grep_opts=""
  100. for keyword in $@; do
  101. grep_opts="$opts -e $keyword"
  102. done
  103. cat_logs "$logroot" "$logpattern" 7 | grep -i $grep_opts | tail -n $tail_history
  104. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log | grep -i $grep_opts
  105. else
  106. cat_logs "$logroot" "$logpattern" 7 | tail -n $tail_history
  107. # [ -f $logroot/$log ] && tail -n 0 -F $logroot/$log
  108. fi