java - Jetty 日志记录配置错误

标签 java jetty

我想按照此处所述设置 Jetty 进行日志记录 - http://www.eclipse.org/jetty/documentation/current/configuring-jetty-request-logs.html

但是启动过程结束时出现错误:

[WARNING] Config error at <Set name="handler">
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"><Set name="handlers">
      <Array type="org.eclipse.jetty.server.Handler"><Item>
          <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
        </Item><Item>
          <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
        </Item><Item>
          <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
        </Item></Array>
    </Set></New>
</Set>
[WARNING] Failed startup of context JettyWebAppContext@2fa8ecf4@2fa8ecf4/,file:/.../test/JettyMavenHelloWarApp/src/main/webapp/,file:/.../test/JettyMavenHelloWarApp/src/main/webapp/
java.lang.NoSuchMethodException: class org.mortbay.jetty.plugin.JettyWebAppContext.setHandler(class org.eclipse.jetty.server.handler.HandlerCollection)
    at org.eclipse.jetty.xml.XmlConfiguration.set(XmlConfiguration.java:455)
    at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:254)
    at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:196)
    at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:82)
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:470)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1127)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:577)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:491)
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:160)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
    at org.eclipse.jetty.server.handler.HandlerCollection$1.run(HandlerCollection.java:200)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450)
    at java.lang.Thread.run(Thread.java:695)

WEB-INF 内的 jetty-web.xml 具有以下配置:

<Set name="handler">
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
    <Set name="handlers">
      <Array type="org.eclipse.jetty.server.Handler">
        <Item>
          <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
        </Item>
        <Item>
          <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
        </Item>
        <Item>
          <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
        </Item>
      </Array>
    </Set>
  </New>
</Set>
<Ref refid="RequestLog">
  <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Arg><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Arg>
      <Set name="retainDays">90</Set>
      <Set name="append">true</Set>
      <Set name="extended">false</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
  </Set>
</Ref> 

我做错了什么?

我使用下一个命令编译并运行我的 WAR 文件: mvn jetty:run

最佳答案

我认为它在 标签上令人窒息。在我的 jetty.xml 中,我配置访问日志,例如

<!-- =========================================================== -->
<!-- Set handler Collection Structure                            --> 
<!-- =========================================================== -->
<Set name="handler">
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
    <Set name="handlers">
     <Array type="org.eclipse.jetty.server.Handler">
       ...
       <!-- Built-in Jetty AccessLog log -->
       <Item>
         <New id="AccessLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
       </Item>
       ...
     </Array>
    </Set>
  </New>
</Set>

<!-- Built-in Jetty AccessLog log -->
<Ref id="AccessLog">
  <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/access.yyyy_mm_dd.log</Set>
      <Set name="filenameDateFormat">yyyyMMdd</Set>
      <Set name="retainDays">7</Set>
      <Set name="append">true</Set>
      <Set name="extended">false</Set>
      <Set name="logLatency">true</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
  </Set>
</Ref>

我设置了处理程序并为其命名,然后通过其 配置处理程序。文件名在 标记中设置,就像所有其他参数一样。

另请注意,它是您在 中设置的“id”属性,而不是像示例配置所示的“refid”属性。

关于java - Jetty 日志记录配置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388019/

相关文章:

java - 自动将 Unicode 字符映射到类似的 EBCDIC 1047 字符

java - 如何在二分查找中找到数组的最后一个元素

java - 如何使用 PKCS12 keystore 以 SSL 模式运行 jetty 服务器?

java - 在 Jetty 中部署简单的 Web 应用程序时遇到问题

java - 将 Jetty 缓冲区转换为 InputStream

java - 具有相同 PK 的 2 个插入为何会成功?如何更新重复的 key ?

java - 生成的 android 项目中缺少 gradlew

java - -XX :OnOutOfMemoryError ="kill -9 %p" Problem

java - css 解析器不起作用?

servlets - Jetty:检测 Webapp 是否启动失败