記事一覧はこちら

Apache Tomcat 6.0の日本語ドキュメント

公式にはねーしThe Ja-Jakarta Project - Tomcat翻訳は5で止まってるしどうしたもんかと思ったけど、沖電気なる会社がOSSでドキュメントを公開していたらしい。 いたらしい。

つまり2015年時点ではごろっと消えているんだけど、最終版ではApache Tomcat 6.0の日本語訳が一部進んでいたらしい。 Apache Tomcat 6.0 - ドキュメンテーション 索引 翻訳してある所の方が少ないレベルだけど、俺が探していたロギングの項目はしっかり訳してあったのでメモ・・・というか転載させてもらう。 [quote font="program" width_="auto" source='Apache Tomcat 6.0 - Tomcat での Logging' id="post-2581-document" ]Apache Tomcat 6.0 Tomcat での Logging

重要な注意
デフォルトでは java.util.logging だけが core Tomcat で利用可能である。 Tomcat は,その [java.util.logging の] logger に向けて [処理をリダイレクトするように] ハードコードされた logging 実装の改名したパッケージを使っているからである。 代替的な logger の使用は,extra コンポーネントの構築後に利用可能である [言い回しがくどいのですが原文も Usage of alternative ... is available ... です] (extras components ドキュメンテーションを参照)。 extra コンポーネントは完全な commons-logging 実装を含んでいる。 [要するに,デフォルトでは java.util.logging 専用の簡易版 commons-logging を使っているから, 内部実装のログ出力を log4j に切り替えるには extra が必要だ,ということです]
はじめに
Tomcat 6.0 はその内部コード全体で Commons Logging を使っており, java.util.logging や Log4J など,開発者が必要に応じてロギング・コンフィグレーションを選択できるようにしている。 Commons Logging は,特定のロギング実装に依存することなく, さまざまなログ・レベルにわたって階層的にログを行う能力を Tomcat に与えている。 Tomcat 6.0 での重要な変更点として,localhost_log を作るために前のバージョンにあった エレメントは,もはや の妥当な入れ子エレメントではない。 そのかわりに,デフォルトの Tomcat コンフィグレーションは java.util.logging を使う。 もしも開発者が Tomcat 内部の詳細なロギング (つまり Tomcat エンジン内部で何が起こっているか) を収集したいならば,下記に詳述するように java.util.logging や log4j などの ロギング・システムを設定すべきである。 [「前のバージョン」 previous versions とありますが,この文書は Tomcat 5.5 からありました]
Tomcat 6.0 は,君が実行時の例外/スタック・トレースのログとして親しんでいたかもしれない localhost_log を廃止した。 これらのタイプのエラーはたいていは未捕獲の例外によって投げられるが,なおも開発者にとって価値がある。 それらは現在 stdout ログに見ることができる。 もしも君が Tomcat のコード内部からの,コンテキストにまたがる詳細なロギングをセットアップ する必要があるならば,単純な log4j コンフィグレーションを使うことができる。 このロギングは,君が使うことに選んだログ・レベルによっては非常に冗舌になることに注意せよ。 log4j ロギング・コンフィグレーションは,スタック・トレース・タイプのロギングを生成しないことにも注意せよ。 それらのスタック・トレースは上述の stdout に出力される。 次のステップにしたがって,tomcat.log という名前のファイルに Tomcat 内部のロギング出力が書き込まれるようにセットアップしてみよう:
  1. 次の内容の log4j.properties というファイルを作成して,$CATALINA_HOME/lib にセーブする。 log4j.rootLogger=debug, R log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/tomcat.log log4j.appender.R.MaxFileSize=10MB log4j.appender.R.MaxBackupIndex=10 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n log4j.logger.org.apache.catalina=DEBUG, R
  2. Log4J (v1.2 以降) をダウンロードして log4j jar を $CATALINA_HOME/lib に置く。
  3. commons-logging 追加コンポーネントを extras.xml を使ってビルドする。 [ここで] extras.xmlTomcat ソース・バンドルの一部である Ant ビルド・スクリプトである。
  4. $CATALINA_HOME/bin/tomcat-juli.jar を output/extras/tomcat-juli.jar で置き換える。
  5. output/extras/tomcat-juli-adapters.jar を $CATALINA_HOME/lib に置く。
  6. Tomcat をスタートさせる。
この log4j コンフィグレーションは,君の Tomcat の logs フォルダに tomcat.log というファイルを最大ファイル・サイズ 10MB かつ 10 個までのバックアップでセットアップする。 DEBUG レベルの指定は Tomcat から最も冗舌な出力を得る。 ロギングにどのパッケージを含めるかについて,君はもっと神経質になれる (し,なるべきだ)。 Tomcat 6 は Engine 名と Host 名で logger を定義 [し,] 使用する。 例えば,デフォルトの Catalina localhost ログ [を出力させる] ためには,これ [下記の3行] を上記の log4j.properties の末尾に付け加えればよい。 (角括弧を使う) この命名規約を log4jXML ベースのコンフィグレーション・ファイルで使うことには 既知の問題があることに注意せよ。将来のバージョンの log4j がこの規約を許すまで, ここに述べたようにプロパティ・ファイルを使うことを我々は推奨する。 DEBUG というレベルは何メガバイトものログ出力を生成し,Tomcat の起動を遅くすることに注意せよ。 このレベルは Tomcat 内部の操作のデバッグが必要なとき,控えめに使うべきだ。 もちろん,君の web アプリケーションはそれ自身の log4j コンフィグレーションを使うべきだ。 そうすることは上記のコンフィグレーションと 矛盾しない。 君の web アプリケーションの WEB-INF/classes フォルダに似たような log4j.properties を置き,WEB-INF/lib に log4j1.2.8.jar を置くとよい [この log4j はクラスローダが違いますから,その web アプリケーションだけの名前空間にはいります]。 それから,君のロギング [の] パッケージ・レベルを指定する。 これは Commons-Logging を必要と *しない* 基本的な log4 のセットアップである。 詳細なオプションについては log4j documentation を調べるべきだ。 本ページの目的は初期導入ガイド (bootstrapping guide) にすぎない。
java.util.logging
JDK に用意されている java.util.logging のデフォルト実装は,あまりに限定的で有用ではない。 JDK logging の限定性は, コンフィグレーションが VM 単位のため,web アプリケーション単位でのロギングが持てない点にあるといえるだろう。 したがって Tomcat は,デフォルト・コンフィグレーションでは,デフォルトの LogManager 実装を, その欠点に対処した JULI というコンテナ・フレンドリーな実装に置き換える。 JULI は標準の JDK java.util.logging と同じコンフィグレーション・メカニズムを, プログラム的なアプローチであれ,プロパティ・ファイルであれサポートする。 主な違いは,クラスローダ単位のプロパティ・ファイルをセットできることと (これは簡単 [で] 再デプロイ・フレンドリーな web アプリケーション・コンフィグレーションを可能にする), ハンドラを定義して logger に割り当てることができるように 少々拡張した構文要素をプロパティ・ファイルがサポートしていることである。 JULI は Tomcat 6 ではデフォルトでイネーブルになっており, 通常のグローバルな java.util.logging コンフィグレーションに加えて, クラスローダ単位のコンフィグレーションをサポートする。 つまり,logging は次のレイヤーで設定できる。
  • JKD の logging.properties ファイルで。 どの JDKTomcat が使っているのかを見るために JAVA_HOME 環境変数の設定をチェックする。 ファイルは $JAVA_HOME/jre/lib にあるはずだ。 あるいは,システム・プロパティ java.util.logging.config.file を使ってどこか別の場所にあるグローバルなコンフィグレーション・ファイルを使うことや, java.util.logging.config.class を使ってプログラム的なコンフィグレーションを使うことができる。
  • logging.properties ファイルを使った各クラスローダで。 これは,Tomcat コアに対して1本のコンフィグレーションを持つばかりでなく, 各 web アプリに対してもそれと同じライフサイクルを持つ個別のコンフィグレーションを持てることを意味する。
デフォルトの logging.properties は,ログ出力を stdout にラウティングする ConsoleHandler 1個と, FileHandler 1個を指定している。 ハンドラのログ・レベルの閾値は SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST または ALL にセットできる。 JDK 添付の logging.properties は INFO にセットされている。 君は特定のパッケージをターゲットにして特定のレベルでログを収集することもできる。 下記は Tomcat からのデバッグ出力をセットする方法である。 忘れずに ConsoleHandler のレベルもこの閾値を収集するようにセットする必要がある。 FINEST または ALL にセットするとよい。 完全な詳細については Sun の java.util.logging ドキュメンテーションを参照されたい。 org.apache.catalina.level=FINEST JULI が使うコンフィグレーションも非常に似ているが,logger の割当てに対し,より良い柔軟性を可能にするため 少しばかり拡張機能を使う。主な違いは:
  • 接頭辞をハンドラ名に付けられるから, 1個のクラスから複数のハンドラをインスタンス化できる。 接頭辞は数字ではじまり,"." で終わる文字列である。 例えば 22foobar. は妥当な接頭辞である。
  • Java 5.0 と同様,logger は loggerName.handlers プロパティを使ってハンドラのリストを 定義できる。
  • デフォルトでは,logger にハンドラがあるとき,logger は自分の親への委譲はしない。 これは boolean 値をとる loggerName.useParentHandlers プロパティで logger ごとに変更できる。
  • root logger はそのハンドラを .handlers プロパティで定義できる。
  • ${systemPropertyName} ではじまるプロパティ値に対するシステム・プロパティ置換。
common/classes に置くべき logging.properties ファイルの例: handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, \ 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, \ java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost. 3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager. 4admin.org.apache.juli.FileHandler.level = FINE 4admin.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 4admin.org.apache.juli.FileHandler.prefix = admin. java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \ 2localhost.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \ 3manager.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].handlers = \ 4admin.org.apache.juli.FileHandler # For example, set the com.xyz.foo logger to only log SEVERE # messages: #org.apache.catalina.startup.ContextConfig.level = FINE #org.apache.catalina.startup.HostConfig.level = FINE #org.apache.catalina.session.ManagerBase.level = FINE servlet-examples web アプリケーションに対し, その web アプリケーション内の WEB-INF/classes に置くべき logging.properties の例: handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ org.apache.juli.FileHandler.level = FINE org.apache.juli.FileHandler.directory = ${catalina.base}/logs org.apache.juli.FileHandler.prefix = servlet-examples. java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

[/quote]

おまけ。公式の最新のドキュメント Apache Tomcat 8 (8.0.24) - Logging in Tomcat 参考 話は変わるけどTomcat6の翻訳は沖電気 - SIer魂 OSS資料室|OSSソリューション|OKI