Tomcatのアクセスログが膨らむので、早めに捨ててしまいたいなあ、と思いしました。
ログは定期的にログサーバに転送しているので、アプリケーションサーバ用のホストに残しておく必要はないという状況です。
logrotateの設定
パッケージ管理ツールでインストールしているTomcatなんですが、標準出力とエラー出力のログであるcatalina.outはもともとローテートの設定が入っていました。
vim /etc/logrotate.d/tomcat7
もともと1年くらい残す設定になっていたんですが、1週間くらいで破棄するようにします。
/var/log/tomcat7/catalina.out
/var/log/tomcat7/access_log.txt
{
copytruncate
daily
rotate 7
compress
missingok
create 0644 tomcat tomcat
}
と、ここでaccess_log.txtと書いたんですが、Tomcatのデフォルト設定では、アクセスログの方は元々ローテートされるようになっていて、毎日ファイル名が変わってしまうようになっています。
アクセスログのローテートもlogrotateでおこなう
Tomcatは、catalina.outは単に吐き続けていて、logrotateがローテートをしています。
一方、アクセスログは、Tomcat自身がローテートさせています。
$ ls localhost_access_log.2014-07-*
localhost_access_log.2014-07-01.txt localhost_access_log.2014-07-02.txt localhost_access_log.2014-07-03.txt localhost_access_log.2014-07-04.txt
ローテートしているのは良いですが、古いログを破棄できないですし、ファイル名が毎日変わっているせいで、logrotateの設定も書けない・・・。
ということで、どちらもまとめてlogrotateでローテートさせてしまうために、Tomcatにはアクセスログをローテートしないでもらって、access_log.txtという単一のファイルに吐き続けてもらうことにします。
Tomcatのアクセスログを固定のファイルに吐き出す
Tomcatのアクセスログの設定は、server.xmlにあります。
vim /etc/tomcat7/server.xml
server.xmlからAccessLogValveの設定を探して、rotatableをfalseにしたら、Tomcat自身はアクセスログをローテートしなくなります。
<valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="access_log" suffix=".txt" rotatable="false" pattern="combined" requestattributesenabled="true">
</valve>
あとファイル名に日付が入っていると、logrotateの設定が書きにくいので、日付もつかないようにして、access_log.txtという固定のファイル名に保存するようにします。
あとはlogrotateに任せる
Tomcat自身がアクセスログをローテートしないようにしたら、あとはlogrotateに任せます。
$ ls -h access_log.txt-*
access_log.txt-20140628.gz access_log.txt-20140629.gz access_log.txt-20140630.gz access_log.txt-20140701.gz access_log.txt-20140702.gz access_log.txt-20140703.gz access_log.txt-20140704.gz
ちゃんと7日分だけ残るようになりました!