LINUX SHELL 抓取錯誤日誌指令碼

2021-06-20 05:14:05 字數 1378 閱讀 4073

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。

本人對shell完全是初學,磕磕碰碰寫了個指令碼。主要邏輯是判斷error的日誌級別的那一行開始記錄,直到碰到下乙個info或者debug的日誌級別行。

[html]view plain

copy

#!/bin/bash  

isinerrorblock

=false

strarray

=()  

count=1

while read line  

do  

#echo "line $count:"  

arrayidx

=$count%10  

strarray[$count]="$line"  

idx=$(expr match "$" ".*error")  

if [ $idx -le 0 ];  

then  

idx=$(expr match "$" ".*exception*")  

fi  

idx2

=$(expr match "$" ".*debug")  

idx3

=$(expr match "$" ".*info")  

if [ $idx -gt 0 ] ;  

then  

if ! $isinerrorblock;  

then          

echo 'print out previous lines'  

isinerrorblock

=true

echo $  

fi  

else  

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

then  

isinerrorblock

=false

else  

if $isinerrorblock;  

then  

echo $   

fi  

fi  

fi  

count

=$[ $count+1 ]  

done  

#echo "finish\n"  

exit 0  

基本達到了要求,對於每個目錄 cat *log | sh find_error.sh 能夠將整個堆疊單獨輸出到乙個檔案。但是效率很慢,不知道如何才能提高shell的執行效率。

更多0

LINUXSHELL抓取錯誤日誌指令碼

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。本人對shell完全是初學,磕磕碰碰...

LINUXSHELL抓取錯誤日誌指令碼

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。本人對shell完全是初學,磕磕碰碰...

Linux shell指令碼錯誤檢測

除了 echo 命令,還可以使用如下兩種方法。1.shell跟蹤選項 set命令執行之後的每一條命令以及加在命令列中的任何引數 包括變數和變數的值 都會顯示出來。是跟蹤輸出的標誌,在子shell中執行的shell命令會加兩個 例 bin sh set x echo n can you write d...