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 ファイルで。
どの JDK を Tomcat が使っているのかを見るために 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, CONFIG, INFO, WARN, FINE, 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
|  |
 |  |  |