タイトル: tomcatの起動/停止ログとcatalina.log/catalina.outの違い
SEOタイトル: tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
| この記事の要点 |
|---|
|
ログファイルの場所
Tomcat の起動 / 停止ログを含む各種ログファイルは $CATALINA_HOME/logs/ ディレクトリに出力されます。
| ファイル名 | 内容 | 出力元 |
|---|---|---|
catalina.YYYY-MM-DD.log | Tomcat 本体の動作ログ(起動・停止・エラー) | java.util.logging (JUL) |
catalina.out | 標準出力 + 標準エラー(System.out.println / 例外スタックトレース等) | OS のシェルリダイレクト |
localhost.YYYY-MM-DD.log | localhost コンテキストのログ | JUL |
manager.YYYY-MM-DD.log | Manager アプリのログ | JUL |
host-manager.YYYY-MM-DD.log | Host Manager アプリのログ | JUL |
localhost_access_log.YYYY-MM-DD.txt | アクセスログ(HTTP リクエスト) | AccessLogValve |
catalina.log と catalina.out の違い
2 つは見た目が似ていますが、出力経路がまったく違います。
catalina.log(正確には catalina.YYYY-MM-DD.log)
- Tomcat 内部の
java.util.loggingハンドラ(1catalina.org.apache.juli.AsyncFileHandler)が出力 - 出力対象: Tomcat コアクラスのログ(起動完了メッセージ・ライフサイクルイベント・コネクタ起動など)
conf/logging.propertiesで出力レベル・フォーマットを制御- 日付ごとに自動ローテーションされる(
catalina.2026-05-15.logのように) - 同梱の
logging.propertiesはmaxDays = 90を設定しており、既定では 90 日より古いログが自動削除される(日数は変更可)
catalina.out
- Tomcat 起動スクリプト(
catalina.sh)がSystem.outとSystem.errをシェルレベルでリダイレクトしたもの - 出力対象: アプリ内の
System.out.println/System.err.println、printStackTrace()、Tomcat 起動初期のメッセージなど logging.propertiesのjava.util.logging.ConsoleHandler出力もここに混ざる- 自動ローテーションされない(無限に追記される)
- Windows サービスとして起動した場合は生成されない(procrun が独自のログに転送するため)
本番運用のローテーション設定
catalina.out は放置すると数 GB に肥大化するため、ローテーションが必須です。
方法 1: logrotate(Linux 推奨)
/etc/logrotate.d/tomcat を作成:
/opt/tomcat/logs/catalina.out {
copytruncate
daily
rotate 14
compress
missingok
notifempty
}
ポイント:
copytruncate: ファイルをコピーしてから 0 バイトに切り詰める(Tomcat 再起動不要)daily: 日次でローテーションrotate 14: 14 世代保持compress: gzip 圧縮
方法 2: 標準出力を分割(catalina.sh の書き換え)
bin/catalina.sh の CATALINA_OUT 設定を編集して、org.apache.juli.AsyncFileHandler 経由でローテーションさせる方法もあります(中級者向け)。
方法 3: アプリ側で log4j2 / SLF4J を使う(推奨)
そもそも System.out.println ではなく log4j2 や SLF4J + Logback を使えば、フレームワーク側でローテーション可能。catalina.out は最小限に抑えられます。
logging.properties のカスタマイズ
Tomcat のログ動作は $CATALINA_HOME/conf/logging.properties で制御します。主要設定:
# ハンドラの追加(catalina.log の場所・サイズ)
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
# ログレベル(全体)
.level = INFO
# 特定パッケージのレベル
org.apache.catalina.startup.level = FINE
org.apache.coyote.level = WARNING
よくあるトラブル
Q. catalina.out にログが出ない
主な原因:
- Windows サービス起動: procrun は標準出力を別ファイル(
tomcat-stdout.YYYY-MM-DD.log)にリダイレクト - 環境変数 CATALINA_OUT が変更されている:
setenv.shで別ファイルにリダイレクトされていないか確認 - パーミッション: tomcat ユーザがログディレクトリに書き込めない
Q. ログが文字化けする(日本語が ??? になる)
logging.properties で encoding = UTF-8 を明示。JVM 起動オプションに -Dfile.encoding=UTF-8 も追加。
Q. ログレベルを変えたのに反映されない
Tomcat 再起動が必要です。動的に変えたい場合は JMX 経由で操作するか、log4j2 等の外部ロギングフレームワークを使用。