Tomcat の catalina.out のローテーション

Tomcat は $CATALINA_HOME/logs 以下に catalina.out という名前で標準出力 (と標準エラー出力) が出力されます。デフォルトではこのファイルにどんどん追記されていくため、気付いたら巨大な ファイルになっていることもありますよね。

このようなファイルはローテーションしましょう。

ファイルを作成している箇所は $CATALINA_HOME/bin/catalina.sh で、2>&1 を使って java コマンドの標準出力をリダイレクトしています。

標準出力をローテーションするには Apache に付属の rotatelogs や cronolog を利用できます。

/usr/sbin/rotatelogs $CATALINA_HOME/logs/catalina.out.%Y-%m-%d 86400 540

ファイル名には %Y 等の strftime(3) のフォーマットを指定可能、後ろの数値は 86400 秒 (1 日) 間隔のローテーション、540 分 (9 時間) の UTC からの時差を示します。

あとは cron などから古いファイルを削除するシェルスクリプトを実行します。

本来は Tomcat 本体が標準出力に書くのをやめるべきだと思いますが、アプリケーションに System.out が残っている場合もありますし、スレッドダンプを取ったりするのに便利なので Java アプリケーションサーバでは標準出力のローテーションは必須ですね。

  • Andy