9.

tomcat の起動 / 停止ログと catalina.log・catalina.out の違い

編集
この記事の要点
  • 起動 / 停止ログの場所は {TOMCAT}/logs/catalina.log または catalina.out
  • catalina.log は java.util.logging 経由のログ(Tomcat 自身の動作ログ)
  • catalina.out は標準出力 + 標準エラー出力System.out / System.err + 例外スタックトレース)
  • catalina.out は日次ローテーションされないため本番では logrotate 等の設定が必須
  • Windows サービス実行時は catalina.out が生成されないことがある(標準出力がリダイレクトされないため)

 

ログファイルの場所

Tomcat の起動 / 停止ログを含む各種ログファイルは $CATALINA_HOME/logs/ ディレクトリに出力されます。

ファイル名内容出力元
catalina.YYYY-MM-DD.logTomcat 本体の動作ログ(起動・停止・エラー)java.util.logging (JUL)
catalina.out標準出力 + 標準エラー(System.out.println / 例外スタックトレース等)OS のシェルリダイレクト
localhost.YYYY-MM-DD.loglocalhost コンテキストのログJUL
manager.YYYY-MM-DD.logManager アプリのログJUL
host-manager.YYYY-MM-DD.logHost 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 のように)
  • 古いログの自動削除は標準ではされないmaxDays 設定で日数指定可)

catalina.out

  • Tomcat 起動スクリプト(catalina.sh)が System.outSystem.errシェルレベルでリダイレクトしたもの
  • 出力対象: アプリ内の System.out.println / System.err.printlnprintStackTrace()、Tomcat 起動初期のメッセージなど
  • logging.propertiesjava.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.shCATALINA_OUT 設定を編集して、org.apache.juli.AsyncFileHandler 経由でローテーションさせる方法もあります(中級者向け)。

方法 3: アプリ側で log4j2 / SLF4J を使う(推奨)

そもそも System.out.println ではなく log4j2SLF4J + 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.propertiesencoding = UTF-8 を明示。JVM 起動オプションに -Dfile.encoding=UTF-8 も追加。

Q. ログレベルを変えたのに反映されない

Tomcat 再起動が必要です。動的に変えたい場合は JMX 経由で操作するか、log4j2 等の外部ロギングフレームワークを使用。

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. tomcatインストール(CentOS)
  2. WARファイルのAutoDeploy設定
  3. tomcatの起動/停止(Linux, Mac)
  4. JRE(JVM)のJavaのバージョン確認方法
  5. エラー一覧
  6. CATALINA_HOMEの確認方法(Linux, Mac)
  7. 管理画面の開き方
  8. tomcatの起動確認方法
  9. tomcatの起動/停止ログとcatalina.log/catalina.outの違い
  10. CentOSにおけるポート開放方法
  11. Javaのバージョン変更方法(Mac編)