JDK logging を設定するには JDK 1.4 以降が必要です。
Tomcat 5.5 は JDK 5.0 以降を対象にしていますが,互換パッケージを使って JDK 1.4
で走らせることもできます。
JDK に用意されている java.util.logging のデフォルト実装は,あまりに限定的で有用ではありません。
JDK logging の限界として,設定が VM 単位のため,web アプリケーション単位でのロギングが
できない模様です。
したがって Tomcat は,デフォルト設定では,デフォルトの LogManager 実装をその欠点に対処した
JULI というコンテナ・フレンドリーな実装に置き換えます。
これは標準の JDK java.util.logging と同じ設定メカニズムを,プログラム的なアプローチであれ,
プロパティ・ファイルであれサポートします。
主な違いは,クラスローダ単位のプロパティ・ファイルをセットできることと
(これは簡単で再配置しやすい web アプリケーションのコンフィグレーションを可能にします),
プロパティ・ファイルがわずかに拡張された構文要素をサポートしていることです。
これはハンドラを定義し logger に割り当てる自由度を増やします。
JULI は Tomcat 5.5 ではデフォルトでイネーブルになっており,
通常のグローバルな java.util.logging コンフィグレーションに加えて,
クラスローダ単位のコンフィグレーションをサポートします。
つまり,logging は次のレイヤーで設定できます。
-
JKD の logging.properties ファイルで。
どの JDK を Tomcat が使っているのかを見るために JAVA_HOME 環境変数の設定をチェックします
(あるいは JRE かもしれません。バージョン 5.5 から Tomcat を JRE
で走らせることができるようになりました)。
ファイルは
$JAVA_HOME/jre/lib にあります。
あるいは,システム・プロパティ java.util.logging.config.file
を使って別の場所にあるグローバルなコンフィグレーション・ファイルを使うことや,
java.util.logging.config.class
を使ってプログラム的なコンフィグレーションを使うことができます。
-
logging.properties ファイルを使った各クラスローダで。
つまり,Tomcat コアに対して1本のコンフィグレーションを持つと同時に,
web アプリと同じライフサイクルを持つ web アプリごとのコンフィグレーションを持つことができます。
デフォルトの logging.properties は,ログ出力を stdout に向けさせる ConsoleHandler と,FileHandler
を指定しています。
ハンドラのログ・レベルの閾値は 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 はその親へ委譲しません。
これは 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
|  |
 |  |  |