默認情況下,tomcat的catalina.out日志文件是沒有像其它日志一樣,按日期進行分割,而是全部輸出全部寫入到一個catalina.out,這樣日積月累就會造成.out日志越來越大,給管理造成了不便,為了實現像其它日志文件一樣按日期歸檔,這里我采用cronolog來完成日志分割。
一、安裝Cronolog
1.yum方式安裝
# yum install cronolog
2.下載壓縮包安裝
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的安裝路徑,后面會用到)
二、修改Tomcat下bin/catalina.sh文件
修改要分隔的Tomcat的日志下bin/catalina.sh文件,要修改的在290行。修改前先拷貝一份。
1. cp catalina.sh catalina.sh.bak
2. vim catalina.sh -c 417 或者 vim catalina.sh之后:417 (進入到catalina.sh的第417行。)
下面為需要修改的內容:標紅的是要修改的區域
修改為:
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/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.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/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
fi
修改后,重啟Tomcat。可以看到更改已經生效。(看到catalina.out出現了catalina.2017-12-19.out等按照日期分類的輸出文件說明配置成功)。
三、shell利用crontab自動清除日志
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:強制刪除文件,包括目錄;
{} \; :固定寫法,一對大括號+空格+\+;
2.創建shell腳本即crontab計划任務
# vim del-15-days-ago-logs.sh
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
# chmod +x del-15-days-ago-logs.sh
# crontab -e
10 0 * * * /opt/soft/log/del-15-days-ago-logs.sh >/dev/null 2>&1