linux命令日志抓取,Linux SHELL 抓取错误日志脚本

本文介绍了一个用于从大量日志文件中提取错误日志的Shell脚本。该脚本通过匹配特定的日志级别来识别错误堆栈,并将其独立输出。虽然实现了基本需求,但在效率上仍有待提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

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

相关阅读:

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值