如何使用Shell 指令碼快速定位專案工程的錯誤日誌

今日主題:使用Shell 指令碼快速定位專案工程的錯誤日誌

在工作中,我們會發現,隨著需求的不斷迭代,專案系統變得越發的複雜,一個專案系統裡需要同時部署N個專案工程。

如何快速的去檢查當前所有專案工程的日誌是否有報錯就成了一個棘手的問題。

面對這個問題,我的選擇是使用Shell 指令碼來實現專案工程的錯誤日誌查詢與定位。

以下內容是Shell 指令碼的實現內容,每一行都有對應的註釋,幫助理解。

 1root@l-test bin # more check_log.sh #檢查一個目錄下所有指定日誌檔案中的報錯 2 3日誌指令碼 4#!/usr/bin/env bash #是對shell的宣告 5 6#定義一個變數,用於指定掃描日誌的目錄 7base="/home/project"  8 9#shell 中無限迴圈定義10while [[ 1 ]]; do 1112#for 迴圈開始遍歷目錄下的檔案,過濾掉default目錄13    for name in `ls $base | grep -vE "default"`;1415#開始執行16    do 1718#輸出目錄路徑19        echo $base/$name 20#判斷是否是目錄21        if [[ -d $base/$name ]]; then2223# 獲取catalina.out 檔案中報Exception|ERROR的日誌,過濾掉DEBUG|skywalking|10.8.0.37:8800這三類資訊24            result=`grep -C10 $base/$name/logs/catalina.out | grep -vE "DEBUG|skywalking|10.8.0.37:8800" | grep -C5 -E "Exception|ERROR"` 2526#if 判斷如果$result為空27            if [[ -z "$result" ]]; then28#繼續 29continue;3031#if 結束符32            fi 3334#帶顏色的輸出一行資訊,說明是什麼目錄下有報錯35            echo -e "/n/033[find Exception in $name/033[0m/n/nExcpetion:/n/n$result" 36#if 結束符37        fi38#do 結束符39    done4041#輸出休息一分鐘 42   echo -e "sleep 60 seconds/n"43#等待一分鐘44    sleep 60s45#do 結束符46done