LINUXSHELL抓取错误日志脚本

任何程序运行起来免不了产生很多日志,其中错误日志需要最为关心的。在某些时候会将错误日志和正常日志分开,但我们的系统却没有这么做。更麻烦的是,每个小时存储一个日志文件,所以每次为了查找当天是否有错误信息需要打开N个文件,而且不能用grep因为需要把整个堆栈抓取下来。 

SHELL

本人对shell完全是初学,磕磕碰碰写了个脚本。主要逻辑是判断ERROR的日志级别的那一行开始记录,直到碰到下一个INFO或者DEBUG的日志级别行。 

#!/bin/bash

 

isInErrorBlock=false

 

strArray=()

count=1

 

 

while read line

 

do

 

  #echo "Line $count:"

 

  arrayIdx=$count%10

   strArray[$count]="$line"

  

 

   idx=$(expr match "${strArray[$count]}" ".*ERROR")

 

   if [ $idx -le 0 ];

   then

idx=$(expr match "${strArray[$count]}" ".*Exception*")

   fi

 

 

   idx2=$(expr match "${strArray[$count]}" ".*DEBUG")

   idx3=$(expr match "${strArray[$count]}" ".*INFO")

 

 

   if [ $idx -gt 0 ] ;

   then

if ! $isInErrorBlock;

then

echo 'print out prevIoUs lines'

isInErrorBlock=true

echo ${strArray[$count]}

 

fi

   else

if [ $idx2 -gt 0 ] || [ $idx3 -gt 0 ] ;

 

then

isInErrorBlock=false

else

if $isInErrorBlock;

then

echo ${strArray[$count]} 

fi

 

fi

   fi

   count=$[ $count+1 ]

done

 

#echo "finish

"

 

exit 0

 

效果

基本达到了要求,对于每个目录 cat *log | sh find_error.sh 能够将整个堆栈单独输出一个文件。但是效率很慢,不知道如何才能提高SHELL的运行效率。 

 

本文来自系统大全为您提供如需转载请注明!推荐win10下载

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...