2

Tomcat で .war アプリケーションの独立したアクセスログを構成しようとしていますが、何が失敗しているのかわかりません。

目的は、Tomcat のグローバル アクセス ログに依存することなく、アプリケーションに送信されるリクエストに対して個別のアクセス ログを記録することです。

このためには、書き込み先を指定する AccessLogValve を使用して、独自のコンテキスト構成ファイルを作成する必要があることを理解しています。

アプリケーションの WAR ファイルに次の内容の META-INF/context.xml を作成しました。

<Context path="/Stubby">
    <Valve class="org.apache.catalina.valves.AccessLogValve"
                    rotatable="true"
                    directory="/var/SP/log/stubby"
                    prefix="access.log_"
                    suffix=""
                    fileDateFormat="yyyyMMdd_HH"
                    pattern="combined"
                    buffered="false"
                    resolveHosts="false"
                    />
</Context>

tomcat を起動すると、このファイルが conf/Catalina/localhost/Stubby.xml にコピーされていることがわかりますが、アプリケーションのロード ルーチン中に解析エラーが発生します。

SEVERE: Begin event threw exception
java.lang.NullPointerException
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
(...)
Jul 13, 2011 6:16:12 PM org.apache.catalina.startup.ContextConfig processContextConfig
SEVERE: Parse error in context.xml for /Stubby
java.lang.NullPointerException
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
        at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1359)

ここで何が問題なのですか?宣言に必須のプロパティがありませんか?

4

2 に答える 2

5

ばかげた間違い...それが読むところ

<Valve class="org.apache.catalina.valves.AccessLogValve"

そのはず

<Valve className=...

この修正後、構成は期待どおりに機能し、META-INF から展開されます。

于 2011-07-14T10:06:04.780 に答える
0

あなたが扱っているのはクラスローダーの問題だと思います.コンテキストxmlをコピーしているクラスローダーがバルブクラスを利用できない可能性があります。そんなことはないと思いますが、context.xml ファイルを META-INF から削除して conf/Catalina/localhost/Stubby.xml にコピーすると、バルブは正しく機能しますか?

于 2011-07-13T18:46:51.580 に答える