任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。
本人對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 "$" ".*error")
if [ $idx -le 0 ];
then
idx=$(expr match "$" ".*exception*")
fiidx2=$(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 $
fifi fi
count=$[ $count+1 ]
done
#echo "finish\n"
exit 0
基本達到了要求,對於每個目錄 cat *log | sh find_error.sh 能夠將整個堆疊單獨輸出到乙個檔案。但是效率很慢,不知道如何才能提高shell的執行效率。
LINUX SHELL 抓取錯誤日誌指令碼
任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟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...