【问题标题】:Jetty logging Config error码头记录配置错误
【发布时间】:2014-08-19 16:02:02
【问题描述】:

我想按照此处所述设置 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

【问题讨论】:

    标签: java jetty


    【解决方案1】:

    我认为它在那个 标签上令人窒息。在我的 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”。

    【讨论】:

    • 你能给我看看你的 pom.xml 吗?我发现 org.mortbay.jetty 应该改成新的。
    • @Tom。我没有 pom.xml 文件。我们使用 gradle 和组装码头配置目录的任务只是将文件和目录结构从源 repo 直接复制到构建目录。
    • 我的 Jetty 版本太旧了。我确实更新了,但在您的代码上收到警告:No object for refid=AccessLog
    • 加上 JAVA_HOME 没有正确设置并更新到 Java 7(这是如果其他人会遇到问题)。
    • 我仍然得到 No object for refid=AccessLog。您的配置中还有什么?
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多