按日切割SpringBoot項目日誌插件及shell腳本

  • 2019 年 11 月 28 日
  • 筆記

好久好久沒更新文章了,感覺自己都比較懶散了。。。事也多,也不知道想給大家分享什麼。

今天這個事我覺得可以給大家分享一下。故事開始:

leader:你幫我找一下昨天的簡訊發送異常的日誌。

小優優:好嘞。

小優優:小優優把昨天同事給小優優發的圖片直接給了Leader。

leader:我要文本的。

小優優:好的,我從伺服器給拉一下。

默默打開打開伺服器,一看日誌文件 26kb,就剩今天重啟後生成的日誌。

呵呵呵呵呵呵呵呵呵呵呵,MD 日誌沒了。。。

一想到leader的臉:怕了怕了。。。。

幸好有伺服器備份的jar包重新跑一下吧。麻蛋、、測試環境沒問題。。。還得到生成環境跑一下有問題的jar包,複製文本給他。嘔吼。徹底完犢子嘍。。

最後用ocr把截圖文本提煉給Leader了,躲過一劫。

幻想:小優優你把生成環境簡訊異常上下文異常複製完整一點。這可咋辦。

小優優主動去找Leader,生成環境和測試環境啟動腳本有問題,每次都會重新生成新的日誌文件,把原有的日誌問題給刪除。

leader:那你想辦法解決一下。

小優優:好的(心裡想:可算逃過一劫。。)

給大家分享一下原來的shell腳本:

#!/bin/bash  ## Author kingyifan  ## UPDATE 2019-11-14  version="1.0.1";    appName=$2  if [ -z $appName ];then      appName=`ls -t |grep .jar$ |head -n1`  fi    function start()  {  	count=`ps -ef |grep java|grep $appName|wc -l`  	if [ $count != 0 ];then  		echo "Maybe $appName is running, please check it..."  	else  		echo "The $appName is starting..."  		nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms128M -Xmx512M > catalina.log 2>&1 &  	fi  }    function stop()  {  	appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ];then  	    echo "Maybe $appName not running, please check it..."  	else          echo "The $appName is stopping..."          kill $appId  	fi  }    function restart()  {      # get release version      releaseApp=`ls -t |grep .jar$ |head -n1`        # get last version      lastVersionApp=`ls -t |grep .jar$ |head -n2 |tail -n1`        appName=$lastVersionApp      stop      for i in {5..1}      do          echo -n "$i "          sleep 1      done      echo 0        backup        appName=$releaseApp      start  }    function backup()  {      # get backup version      backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`        # create backup dir      if [ ! -d "backup" ];then          mkdir backup      fi        # backup      for i in ${backupApp[@]}      do          echo "backup" $i          mv $i backup      done  }    function status()  {      appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ]  	then  	    echo -e "33[31m Not running 33[0m"  	else  	    echo -e "33[32m Running [$appId] 33[0m"  	fi  }      function usage()  {      echo "Usage: $0 {start|stop|restart|status|stop -f}"      echo "Example: $0 start"      exit 1  }    case $1 in  	start)  	start;;    	stop)  	stop;;    	restart)  	restart;;    	status)  	status;;    	*)  	usage;;  esac

最後更正為:

#!/bin/bash  ## Author kingyifan  ## UPDATE 2019-11-14  version="1.0.1";    appName=$2  if [ -z $appName ];then      appName=`ls -t |grep .jar$ |head -n1`  fi    function start()  {  	count=`ps -ef |grep java|grep $appName|wc -l`  	if [ $count != 0 ];then  		echo "Maybe $appName is running, please check it..."  	else  		echo "The $appName is starting..."  		nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms128M -Xmx512M >> catalina.log 2>&1 &  	fi  }    function stop()  {  	appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ];then  	    echo "Maybe $appName not running, please check it..."  	else          echo "The $appName is stopping..."          kill $appId  	fi  }    function restart()  {      # get release version      releaseApp=`ls -t |grep .jar$ |head -n1`        # get last version      lastVersionApp=`ls -t |grep .jar$ |head -n2 |tail -n1`        appName=$lastVersionApp      stop      for i in {5..1}      do          echo -n "$i "          sleep 1      done      echo 0        backup        appName=$releaseApp      start  }    function backup()  {      # get backup version      backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`        # create backup dir      if [ ! -d "backup" ];then          mkdir backup      fi        # backup      for i in ${backupApp[@]}      do          echo "backup" $i          mv $i backup      done  }    function status()  {      appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ]  	then  	    echo -e "33[31m Not running 33[0m"  	else  	    echo -e "33[32m Running [$appId] 33[0m"  	fi  }      function usage()  {      echo "Usage: $0 {start|stop|restart|status|stop -f}"      echo "Example: $0 start"      exit 1  }    case $1 in  	start)  	start;;    	stop)  	stop;;    	restart)  	restart;;    	status)  	status;;    	*)  	usage;;  esac

小夥伴你們看到有沒有什麼區別,貌似看不出來:>>兩個箭頭是追加。

這樣一改啟動可以追加日誌了。

這樣改完之後是可以正常追加日誌了,但是如果訪問量上來了,日誌太多了,追查某一天的日誌腫么辦?

後來我們用到了新的方案:利用cronolog插件(日誌切割工具)按天分隔日誌。 二話不說來安裝cronolog

第一步:先創建cronolog文件目錄

進入/DATA/目錄,可以存放任意目錄。  cd /DATA/    //創建cronolog文件目錄  mkdir cronolog

第二步上傳cronlog文件:

cronolog文件下載路徑: https://pan.baidu.com/s/1Sjx9-2_xgptQsex6qmO2Vg 提取碼: qw2w

第三步:解壓文件:

解壓文件:  tar -zxvf cronolog-1.6.2.tar.gz

解壓結果:

第四步:安裝cronolog

4.1、進入cronolog-1.6.2目錄

命令:   cd cronolog-1.6.2

4.2執行./configure

命令:  ./configure 

4.3執行安裝

命令:  make & make install

第五步:查詢是否安裝成功

查看cronolog安裝後所在目錄(驗證安裝是否成功)

which cronolog

一般情況下顯示為:/usr/local/sbin/cronolog 則為安裝成功。

這樣就安裝成功了,現在我們改一下SpringBoot的啟動shell腳本

#!/bin/bash  ## Author kingyifan  ## UPDATE 2019-11-14  version="1.0.1";    appName=$2  if [ -z $appName ];then      appName=`ls -t |grep .jar$ |head -n1`  fi    function start()  {  	count=`ps -ef |grep java|grep $appName|wc -l`  	if [ $count != 0 ];then  		echo "Maybe $appName is running, please check it..."  	else  		echo "The $appName is starting..."  	    nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms128M -Xmx512M  | /usr/local/sbin/cronolog  ./log/catalina-%Y-%m-%d.out >>/dev/null  2>&1 &  	fi  }    function stop()  {  	appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ];then  	    echo "Maybe $appName not running, please check it..."  	else          echo "The $appName is stopping..."          kill $appId  	fi  }    function restart()  {      # get release version      releaseApp=`ls -t |grep .jar$ |head -n1`        # get last version      lastVersionApp=`ls -t |grep .jar$ |head -n2 |tail -n1`        appName=$lastVersionApp      stop      for i in {5..1}      do          echo -n "$i "          sleep 1      done      echo 0        backup        appName=$releaseApp      start  }    function backup()  {      # get backup version      backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`        # create backup dir      if [ ! -d "backup" ];then          mkdir backup      fi        # backup      for i in ${backupApp[@]}      do          echo "backup" $i          mv $i backup      done  }    function status()  {      appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`  	if [ -z $appId ]  	then  	    echo -e "33[31m Not running 33[0m"  	else  	    echo -e "33[32m Running [$appId] 33[0m"  	fi  }      function usage()  {      echo "Usage: $0 {start|stop|restart|status|stop -f}"      echo "Example: $0 start"      exit 1  }    case $1 in  	start)  	start;;    	stop)  	stop;;    	restart)  	restart;;    	status)  	status;;    	*)  	usage;;  esac
腳本解析:  nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms128M -Xmx512M  | /usr/local/sbin/cronolog  ./log/catalina-%Y-%m-%d.out >>/dev/null  2>&1 &    默認啟動命令: 128M和512M是最小記憶體和最大記憶體。  nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms128M -Xmx512M     | /usr/local/sbin/cronolog : cronolog是執行最上面which cronolog顯示的地址      ./log/catalina-%Y-%m-%d.out >>/dev/null  2>&1 & :會在當前目錄下創建一個log目錄,然後根據時間生成日誌文件。

使用方法放到和jar包同一目錄:

我們啟動一下腳本文件:

啟動命令:  sh app.sh start

我們已經看到他在當前目錄下創建了一個log文件夾

我們查一下當天的日誌

進入目錄:  cd log  查看日誌:  tail -f catalina-2019-11-14.out

明天會自動重新創建新的日誌文件: 我們看一下昨天啟動後今天生成的日誌文件:

終、、本文就是按天分隔日誌已經啟動SpringBoot腳本,有什麼問題可以聯繫我。


本文用到的插件和shell腳本下載路徑: https://pan.baidu.com/s/1PcEXJd4B5HNBVNrLabbLOg 提取碼: 5ybe