個々の webapp のレベルで処理しようとするのではなく、Tomcat のレベルに外部化しようとしている、特定のシステム上のすべての webapps 間でいくつかの共通のログ構成があります。使用している Web アプリケーションは、カスタム ハンドラーを使用してjava.util.logging
いるため、やや困難であることが証明されており、カスタム ハンドラーを tomcat のクラスローダーとうまく連携させる明白な方法はないようです。現時点では、これはすべてプロトタイプ段階です。
暫定版: Tomcat 7.0.32、Java 6。デフォルトの tomcat 7 のインストールでは、1 つの REST サービスがデプロイされており、構成に問題はありません。
まず、この回答のアドバイスに大まかに従って、カスタム ハンドラーを作成して jar を入れ、$CATALINA_HOME/lib
そのディレクトリが正しいディレクトリにあり、common.loader
このディレクトリが含まれていることを確認しました。
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
次に、logging.properties
ファイルを変更してハンドラーを追加しました。
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler, my.custom.Handler
./startup.sh
ただし、を実行すると、次のようになります。
[Loaded java.io.PrintWriter from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
[Loaded java.util.logging.StreamHandler from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
[Loaded java.util.logging.ConsoleHandler from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
Handler error
java.lang.ClassNotFoundException: my.custom.Handler
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
at java.util.logging.LogManager$2.run(LogManager.java:267) [...]
(これは と一緒JAVA_OPTS=-verbose:class
です)。
関連するクラスが後でロードされるのを見ましたが、これは一貫性がないようで、おそらく前述の REST サービス (それを直接使用していた) のアーティファクトです。
CLASSPATH
jar を直接追加すると、すべてが正しく機能するようになりますが、ローダーを変更するのではなく、これは一般的に推奨されないようです。
java.util.logging.Handler
読み込まれる前にクラスローダーにカスタム (および後でフォーマッター) をきれいに追加する方法に欠けている特定のものはありlogging.properties
ますか?
あるいは、私が間違ったツリーを平気で吠えている場合は、java.util.logging
.