任何程序运行起来免不了产生很多日志,其中错误日志需要最为关心的,
LINUXSHELL抓取错误日志脚本
。在某些时候会将错误日志和正常日志分开,但我们的系统却没有这么做。更麻烦的是,每个小时存储一个日志文件,所以每次为了查找当天是否有错误信息需要打开N个文件,而且不能用grep因为需要把整个堆栈抓取下来。
SHELL
本人对shell完全是初学,磕磕碰碰写了个脚本。主要逻辑是判断ERROR的日志级别的那一行开始记录,直到碰到下一个INFO或者DEBUG的日志级别行。
#!/bin/bashisInErrorBlock=falsestrArray=()count=1while read linedo #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\n"exit 0