设为首页 加入收藏

TOP

Linux SHELL 抓取错误日志脚本
2014-11-24 01:43:16 来源: 作者: 【 】 浏览:1
Tags:Linux SHELL 错误 日志 脚本

背景


任何程序运行起来免不了产生很多日志,其中错误日志需要最为关心的。在某些时候会将错误日志和正常日志分开,但我们的系统却没有这么做。更麻烦的是,每个小时存储一个日志文件,所以每次为了查找当天是否有错误信息需要打开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\n"


exit 0


效果


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


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言typedef关键字学习 下一篇Redis 客户端与服务端通信协议

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: