截取tomcat catalina.out日志

回复 收藏
本帖最后由 乐橙306 于 2016-3-29 17:31 编辑
  1. 写一个截取tomcat   catalina.out日志的脚本
  2. tomcat实例t1-t4
  3. [root@niaoyun-101 opt]# tree  -L  1   /opt/TOM/
  4. /opt/TOM/
  5. ├── crontabs
  6. ├── t1
  7. ├── t2
  8. ├── t3
  9. └── t4
  10. 5 directories, 0 files
  11. [root@niaoyun-101 opt]# find  /opt/TOM/   -name  catalina.out
  12. /opt/TOM/t1/logs/catalina.out
  13. /opt/TOM/t3/logs/catalina.out
  14. /opt/TOM/t4/logs/catalina.out
  15. /opt/TOM/t2/logs/catalina.out
  16. [root@niaoyun-101 opt]#
  17. 要求:
  18. 1.这个脚本可以取tomcat实例t1-t4的日志
  19. 2.这个脚本可以自定义取日志的起始点 ,比如取今天早上10点之后到现在的数据
  20. 3.这个脚本可以自定义取日志的起始点和终点,比如取今天早上9点到晚上8点的数据

2016-03-29 17:07 举报
已邀请:
0

乐橙306

赞同来自:

  1. catalina.out  日志格式

  2. Mar 29, 2016 1:52:24 PM org.apache.coyote.AbstractProtocol start
  3. INFO: Starting ProtocolHandler ["http-bio-8080"]
  4. Mar 29, 2016 1:52:24 PM org.apache.coyote.AbstractProtocol start
  5. INFO: Starting ProtocolHandler ["ajp-bio-8009"]
  6. Mar 29, 2016 1:52:24 PM org.apache.catalina.startup.Catalina start
  7. INFO: Server startup in 2102 ms
0

乐橙306

赞同来自:

  1. #!/bin/bash
  2. ##
  3. #
  4. #
  5. export LANG=en_US.UTF-8
  6. export PATH=$PATH

  7. IPADD=`/sbin/ifconfig | grep "inet addr" | head -1 | awk '{print $2}'| awk -F '.' '{print $NF}'`
  8. LOGFILE="/opt/TOM/$1/logs/catalina.out"
  9. YEAR=`date +%Y`
  10. DATE=`date +%m%d_%H%M`
  11. TOMCAT=$1
  12. BEGIN_TIME=$YEAR$2
  13. END_TIME=$YEAR$3

  14. ##judge is  a.m.or p.m.
  15. TIME_HOUR1=`echo ${BEGIN_TIME:9:2}`

  16. cut_log() {

  17.         N_DATE1=`echo $1 | sed 's/_/ /g'`
  18.         D_DATE1=`echo $2 | sed 's/_/ /g'`
  19.         E_DATE1=`echo $3 | sed 's/_/ /g'`

  20.         [ $4 ] && N_DATE2=`echo $4 | sed 's/_/ /g'`
  21.         [ $5 ] && D_DATE2=`echo $5 | sed 's/_/ /g'`
  22.         [ $6 ] && E_DATE2=`echo $6 | sed 's/_/ /g'`

  23.                 BEGIN=`grep -nE "${N_DATE1}|${D_DATE1}|${E_DATE1}" ${LOGFILE} | head -1 | cut -d : -f1`
  24.                 [ "$N_DATE2" ] && END=`grep -nE "${N_DATE2}|${D_DATE2}|${E_DATE2}" ${LOGFILE} | tail -1 | cut -d : -f1`

  25.                 [ ! -z "${TIME_HOUR1}" ] && if [ ${TIME_HOUR1} -gt 12 ] ; then
  26.                 BEGIN1=`grep -nE "${N_DATE1}|${D_DATE1}|${E_DATE1}" ${LOGFILE} |grep " PM " |grep "${E_DATE1}" | head -1 | cut -d : -f1`
  27.                 if [ ! -z "${BEGIN1}" ] ; then
  28.                 [ "${BEGIN1}" -gt "${BEGIN}" ] ; BEGIN=${BEGIN1}
  29.                 fi
  30.         fi

  31.         if [ "$BEGIN" ] && [ -z "$END" ] ; then
  32.                 if [ "$N_DATE2" ]; then
  33.                         echo  "${END_TIME}时间点没有访问日志,请重新设置时间点."
  34.                 else
  35.                         sed -n "${BEGIN},[        DISCUZ_CODE_0        ]quot;p ${LOGFILE} > /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.log
  36.                 fi
  37.         elif [ "$END" ];then
  38.                 [ "$BEGIN" ] || BEGIN=1
  39.                 sed -n "${BEGIN},${END}"p ${LOGFILE} > /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.log
  40.         else
  41.                 [ "$END_TIME" != "$YEAR" ] && echo "该时段 ${BEGIN_TIME}~${END_TIME} 没有日志."
  42.                 [ "$END_TIME" = "$YEAR" ] && echo "该时段 ${BEGIN_TIME}~now 没有日志."
  43.         fi

  44.         if [ -s /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.log ]; then
  45.                 cd /home/gcweb  &&  tar -zcf ${IPADD}_${TOMCAT}_${DATE}.tar.gz ${IPADD}_${TOMCAT}_${DATE}.log
  46.                 rm -f /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.log

  47.                 sz /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.tar.gz
  48.                 echo "Success to get logs."

  49.                 rm -f /home/gcweb/${IPADD}_${TOMCAT}_${DATE}.tar.gz
  50.         fi
  51. }

  52. get_time() {
  53.         case "$1" in
  54.                 4)      
  55.                  N_DATE=`date -d "$2" +"%Y-%m-%d" 2>/dev/null`
  56.                  D_DATE=`date -d "$2" +"%Y/%m/%d" 2>/dev/null`
  57.                  E_DATE=`date -d "$2" +"%h %e,_%Y" 2>/dev/null|sed 's/ /_/g'`
  58.                  echo $N_DATE $D_DATE $E_DATE
  59.                  ;;      
  60.                 7)      
  61.                  TIME=`echo $2 | awk -F'_' '{print $1,$2}'`
  62.                  N_DATE=`date -d "$TIME" +"%Y-%m-%d_%H" 2>/dev/null`
  63.                  D_DATE=`date -d "$TIME" +"%Y/%m/%d_%H" 2>/dev/null`
  64.                  E_DATE=`date -d "$TIME" +"%h %e,_%Y %l" 2>/dev/null|sed 's/ /_/g'`
  65.                  echo  "$N_DATE"  "$D_DATE" "$E_DATE"
  66.                 ;;
  67.                 9)     
  68.                  TIME=`echo $2 | awk -F'_' '{print $1,$2}'`
  69.                  N_DATE=`date -d "$TIME" +"%Y-%m-%d_%H:%M" 2>/dev/null`
  70.                  D_DATE=`date -d "$TIME" +"%Y/%m/%d_%H:%M" 2>/dev/null`
  71.                  E_DATE=`date -d "$TIME" +"%h %e,_%Y %l:%M" 2>/dev/null|sed 's/ /_/g'`
  72.                  echo  "$N_DATE" "$D_DATE" "$E_DATE"
  73.                 ;;
  74.                 *)      
  75.                  echo 1
  76.                 ;;
  77.        esac
  78. }

  79. check_arguments () {
  80.         if [ "$1" == 1 ] || [ -z  "$1" ] ;then
  81.                 echo "你输入时间参数的格式无法识别, usage: 0108、0108_10、0108_1020"
  82.                 exit 3
  83.         fi
  84. }

  85. check_tomcat () {
  86.         if [ ! -s "${LOGFILE}" ] ;then
  87.           echo "tomcat_name: ${TOMCAT} is not exist"
  88.           echo "you can choose:"
  89.           /bin/ls  /home/gcweb/usr/local/
  90.         fi
  91.         if [ $1 -lt 2 ] || [ ! -s "${LOGFILE}" ];then
  92.                 echo "usage: $0 tomcat_name {begin_time|begin_time end_time}"
  93.                 exit 2
  94.         fi
  95. }

  96. case "$#" in
  97.     0)
  98.         echo "usage: $0 tomcat_name {begin_time|begin_time end_time}"
  99.         exit 1
  100.         ;;
  101.     1)
  102.         check_tomcat $#
  103.         ;;
  104.     2)
  105.         check_tomcat $#
  106.         len=`echo $2 | awk '{print length($0)}'`
  107.         A_DATE=$(get_time  $len $BEGIN_TIME)
  108.         eval  $( echo $A_DATE |awk '{print "N_DATE="$1,"D_DATE="$2,"E_DATE="$3}')
  109.         check_arguments "${N_DATE}"

  110.         cut_log "${N_DATE}" "${D_DATE}" "${E_DATE}"
  111.         ;;
  112.     3)
  113.         check_tomcat $#
  114.         len1=`echo $2 | awk '{print length($0)}'`
  115.         len2=`echo $3 | awk '{print length($0)}'`
  116.         A_DATE=$(get_time ${len1}  $BEGIN_TIME)
  117.         eval  $( echo $A_DATE |awk '{print "N_DATE1="$1,"D_DATE1="$2,"E_DATE1="$3}')
  118.         check_arguments "${N_DATE1}"

  119.         A_DATE=$(get_time ${len2}  $END_TIME)
  120.         eval  $( echo $A_DATE |awk '{print "N_DATE="$1,"D_DATE="$2,"E_DATE="$3}')
  121.         check_arguments "${N_DATE}"
  122.         cut_log ${N_DATE1} ${D_DATE1} ${E_DATE1} "${N_DATE}" "${D_DATE}" "${E_DATE}"
  123.         ;;
  124.     *)
  125.         echo "usage: $0 tomcat_name {begin_time|begin_time end_time};你使用的参数太多哦."
  126.         ;;
  127. esac
0

乐橙306

赞同来自:

相信我  看懂这个脚本  可以学不少   

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: