tomcat中特定于应用程序的访问日志?

And*_*des 2 logging tomcat context.xml access-log tomcat-valve

我试图在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>
Run Code Online (Sandbox Code Playgroud)

启动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)
Run Code Online (Sandbox Code Playgroud)

这有什么不对?我是否遗漏了声明中的任何强制性财产?

And*_*des 5

愚蠢的错误......它在哪里读

<Valve class="org.apache.catalina.valves.AccessLogValve"
Run Code Online (Sandbox Code Playgroud)

它应该是

<Valve className=...
Run Code Online (Sandbox Code Playgroud)

在此修复之后,配置按预期工作,从META-INF部署.