Tomcatログ
以下、6種類有
① catalina.YYYY-MM-DD.log
② localhost.YYYY-MM-DD.log
③ manager.YYYY-MM-DD.log
④ host-manager.YYYY-MM-DD.log
⑤ localhost_access_log.txt
⑥ catalina.out
①~⑤ まではTomcatの機能でログローテートが可能である。※
⑥ はTomcatの機能でログローテートする機能がないように見える。そのためOSの標準機能で実施する。
※ ⑤に関してはログローテート自体を止めることができるため、OSのlogrotateを使用する方式で行う。
①~④に関してはログローテートを止める方法が勉強不足で見つからなかったためTomcatの機能を使用する。
ログローテーション(OS標準に任せる)
localhost_access_log
最初にログ出力の形式などを設定している箇所を確認
ログローテートに関しては未記載で実施する設定になっている。
$ sudo cat /opt/tomcat/apache-tomcat-8.5.29/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
極力OSの標準機能のlogrotateで管理するようにしたいため、ログローテートを止める必要がある。
また、出力形式もなじみ深いapacheと同一のものに変更。
そのような変更を加えたものが以下である。
$ sudo vim /opt/tomcat/apache-tomcat-8.5.29/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access" suffix=".txt"
rotatable="false"
pattern="combined" />
これでlocalhost_access_logは準備OK
logrotate
Tomcatがログをつかんでいるので、copytruncateが必須
compressは用途に応じて
$ sudo vim /etc/logrotate.d/tomcat8
/opt/tomcat/apache-tomcat-8.5.29/logs/catalina.out
/opt/tomcat/apache-tomcat-8.5.29/logs/localhost_access.txt
{
copytruncate
daily
rotate 7
compress
missingok
create 0644 tomcat tomcat
}
ログローテーション(Tomcatの機能)
Tomcatの機能でローテートするlogの場合は、ログローテート自体は毎日実行してくれるが、削除する機能がない。
そのため削除するシェルスクリプトが必要となる。
$ sudo vim shell/TomcatLogDel.sh
#!/bin/bash
LOG_DIR=/opt/tomcat/apache-tomcat-8.5.29/logs/
delfiles=`find ${LOG_DIR}*.log -mtime +7`
for a in $delfiles
do
echo -e "delete file: ${a}" > /dev/null 2>&1
rm -f ${a}
done
これで7日以上経過したログは削除され、Tomcatのログでリソースがひっ迫することはない。
シェルスクリプトは暫定で後日編集予定。