1. 程式人生 > 其它 >日誌分隔工具Cronolog的使用 (Tomcat)

日誌分隔工具Cronolog的使用 (Tomcat)

預設情況下,tomcat的catalina.out日誌檔案是沒有像其它日誌一樣,按日期進行分割,而是全部輸出全部寫入到一個catalina.out,這樣日積月累就會造成.out日誌越來越大,給管理造成了不便,為了實現像其它日誌檔案一樣按日期歸檔,這裡採用cronolog來完成日誌分割。
一、安裝Cronolog

    YUM 安裝

      yum install cronolog

    或者使用下載壓縮包安裝

          1. 下載(最新版本)
              wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
         
          2. 解壓縮
              tar zxvf cronolog-1.6.2.tar.gz
         
          3. 進入安裝目錄
              cd cronolog-1.6.2
         
          4. 執行安裝
              ./configure
              make
              make install
         
          5. 檢視是否安裝成功
              which cronolog
              結果:/usr/local/sbin/cronolog  (這個是cronolog的安裝路徑,後面會用到)

    如果上面兩種下載方式都受到網路限制,可以去自由軟體庫下載 http://download.chinaunix.net/download.php?id=3457&ResourceID=1851

修改Tomcat下bin/catalina.sh檔案

修改:

為:

    修改要分隔的Tomcat的日誌下bin/catalina.sh檔案。修改前先拷貝一份。
     
    1. cp catalina.sh catalina.sh.bak
    2. vim catalina.sh
    下面為需要修改的內容:標紅的是要修改的區域

    修改為:
      shift
      # touch "$CATALINA_OUT"
      if [ "$1" = "-security" ] ; then
        if [ $have_tty -eq 1 ]; then
          echo "Using Security Manager"
        fi
        shift
        eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
          -classpath "\"$CLASSPATH\"" \
          -Djava.security.manager \
          -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
          -Dcatalina.base="\"$CATALINA_BASE\"" \
          -Dcatalina.home="\"$CATALINA_HOME\"" \
          -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
          org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
          | /usr/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
     
      else
        eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
          -classpath "\"$CLASSPATH\"" \
          -Dcatalina.base="\"$CATALINA_BASE\"" \
          -Dcatalina.home="\"$CATALINA_HOME\"" \
          -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
          org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
          | /usr/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
     
      fi

修改後,重啟Tomcat。可以看到更改已經生效。(看到catalina.out出現了catalina.2017-12-19.out等按照日期分類的輸出檔案說明配置成功)。

    如果配置不成功,肯定是修改的位置不對。
    本文後也附有catalina.out修改後的完整內容,直接複製貼上,替換掉catalina.out內的內容即可。

2.png
三、shell利用crontab自動清除日誌

linux下執行程式有時會產生大量的記錄日誌,以便排除隱藏很深的問題,但時間一長就會佔用很多的磁碟空間。每天手動清除也比較麻煩,因此一個定時指令碼執行是很有必要的。

3.1 刪除檔案shell命令詳解

    find 對應目錄 -mtime +天數 -name "檔名" -exec rm -rf {} \;
     
    例子:
        find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
     
    說明:將/opt/soft/log/目錄下所有30天前帶".log"的檔案刪除。具體引數說明如下:
        find:linux的查詢命令,使用者查詢指定條件的檔案;
        /opt/soft/log/:想要進行清理的任意目錄;
        -mtime:標準語句寫法;
        +30:查詢30天前的檔案,這裡用數字代表天數;
        "*.log":希望查詢的資料型別,"*.jpg"表示查詢副檔名為jpg的所有檔案,"*"表示查詢所有檔案,這個可以靈活運用,舉一反三;
        -exec:固定寫法;
        rm -rf:強制刪除檔案,包括目錄;
        {} \; :固定寫法,一對大括號+空格+\+; 

3.2 建立shell指令碼即crontab計劃任務

    建立shell指令碼:

     vim del-15-days-ago-logs.sh

    指令碼內輸入以下內容,可以寫多行,以分號分隔,同時管理多個tomcat的日誌:

         (這裡我嘗試如果加上#!/bin/sh計劃任務不能生效,因此我沒加。另外該指令碼與計劃任務內不要有註釋。)
         
         find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

    分配可執行許可權:

     chmod +x del-15-days-ago-logs.sh

    使用crontab加入到系統計劃任務:

         crontab -e
         
         在計劃任務內輸入以下內容:
         
             10 0 * * * /opt/soft/log/del-15-days-ago-logs.sh >/dev/null 2>&1
             (這裡設定的是每天凌晨0點10分執行del-15-days-ago-logs.sh檔案進行資料清理任務,根據自己需求靈活變化清理時間和指令碼防止的地址)

    上述操作進行完後,就可以了,為了方便測試,可以建立n天前建立的檔案。

         touch -d "30 days ago" catalina.19-12-10.out
         touch -d "30 days ago" catalina.19-12-11.out
         .......