針對現有機器tomcat日誌隨着時間的延長,積累的日誌達到幾個G甚至更多(一臺機器的全部的日誌全部集中在一起),想導出某時間段的日誌,通過導出腳本發現速度非常慢,而且服務器的壓力會很大。
解決辦法:通過日誌切割工具cronolog將日誌按照以天爲單位輸出,保存成不同的文件。這樣導出日誌的時候只要指定日期,導出將會很快。
步驟:
1、cronolog的安裝(安裝方法很簡單)
#tar -zxvf cronolog-1.6.2.tar.gz
#cd cronolog-1.6.2
#./configure
#make && make install
#which cronolog
/usr/local/sbin/cronolog
到此cronolog的安裝已經完成,驗證成功
2、配置tomcat切割對cronolog的應用
注:爲了方便將多個tomcat的日誌放在一起,方便管理(下面的路徑只是參照)
#cd /data/install/tomcat7cluster/tomcats/tomcat_8181/
#cd bin/
#vim catalina.sh
touch "$CATALINA_OUT" if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" fi shift eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -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 \ >> "$CATALINA_OUT" 2>&1 "&" else eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -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 /data/install/tomcat7cluster/logs/test81.%Y-%m-%d.log >> /dev/null& # >> "$CATALINA_OUT" 2>&1 "&" fi
上述23行修改的部分包括cronolog的路徑,以及日誌的存放路徑,注:25行的代碼註釋掉。
完成配置之後,重啓tomcat
#./startup.sh
查看日誌存放的路徑,是否生成當天的日誌
#cd /data/install/tomcat7cluster/logs
#ls
test81.2016-05-20.log
到此日誌分割完成
3、簡單的日誌查看和導出腳本
a.方便查看,直接執行腳本可以查看當前刷新的日誌
#cd /data/install/tomcat7cluster
#vim tail-log.sh(腳本名)
#!/bin/sh log_dir="/data/install/tomcat7cluster/logs" log_file=`date '+test81.%Y-%m-%d.log'` tail -f ${log_dir}/${log_file}
保存退出,可以試試效果哦。
b.日誌導出腳本
腳本位置隨意,導出的日誌位置也是隨意,這裏日誌在root下的logs中
#vim get-log.sh
#!/bin/bash echo -e "Which day do you want to log,such as \033[31m2016-05-20\033[0m" read -p "please enter: " a echo echo -e "Please enter start time,such as \033[31m16-01-27 14:51:27\033[0m" read -p "Write down your answers: " b echo -e "Please enter stop time,such as \033[31m16-01-27 14:51:27\033[0m" read -p "Write down your answers: " c echo read -p "what name do you want to save: " d tomcat_dir="/data/install/tomcat7cluster/" log_dir="${tomcat_dir}/logs/test81.$a.log" sednum1=`grep -n "$b" ${log_dir} | head -1 | awk -F ':' '{print $1}'` sednum2=`grep -n "$c" ${log_dir} | tail -1 | awk -F ':' '{print $1}'` sed -n "${sednum1},${sednum2}p" ${log_dir} > /root/logs/${d} echo -e "\033[31m########check logs###########\033[0m" cho -e "\033[34mhead\033[0m" head /root/logs/${d} sleep 5 echo -e "\033[34mtail\033[0m" tail /root/logs/${d}
注意:tomcat版本不同日誌格式會不相同,根據實際情況做調整。
執行完成後,可以去存的目錄下查看,到此。對tomcat日誌的改造到此結束。