Jump to: navigation, search

Difference between revisions of "Jetty/Tutorial/RequestLog"

m (Make the example XML valid and working)
(4 intermediate revisions by 2 users not shown)
Line 75: Line 75:
 
This configures a request log in $JETTY_HOME/logs with filenames including the date. Old log files are kept for 90 days before being deleted. Existing log files are appended to and the extended NCSA format is used in the GMT timezone.
 
This configures a request log in $JETTY_HOME/logs with filenames including the date. Old log files are kept for 90 days before being deleted. Existing log files are appended to and the extended NCSA format is used in the GMT timezone.
  
There are many more configuration options available - see [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/RequestLog.java?root=RT_Jetty&view=markup NCSARequestLog.java]
+
There are many more configuration options available - see [http://dev.eclipse.org/viewcvs/viewvc.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/NCSARequestLog.java?view=markup&root=RT_JETTY NCSARequestLog.java]
 
| more =  
 
| more =  
 
===Configuring Separate Request Log For Web Application===
 
===Configuring Separate Request Log For Web Application===
Line 84: Line 84:
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
 
   ...
 
   ...
   <Call name="addHandler">
+
   <Set name="handler">
     <Arg>
+
     <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
      <New class="org.eclipse.jetty.server.handler.RequestLogHandler">
+
      <Set name="requestLog">
        <Set name="requestLog">
+
        <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
          <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
+
          <Set name="filename"><Property name="jetty.logs" default="./logs"/>/test-yyyy_mm_dd.request.log</Set>
            <Arg><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.test.request.log</Arg>
+
          <Set name="filenameDateFormat">yyyy_MM_dd</Set>
            <Set name="retainDays">90</Set>
+
          <Set name="LogTimeZone">GMT</Set>
            <Set name="append">true</Set>
+
          <Set name="retainDays">90</Set>
            <Set name="extended">false</Set>
+
          <Set name="append">true</Set>
            <Set name="LogTimeZone">GMT</Set>
+
        </New>
          </New>
+
      </Set>
        </Set>
+
    </New>
      </New>
+
   </Set>
    </Arg>
+
   </Call>
+
 
   ...
 
   ...
 
</Configure>
 
</Configure>

Revision as of 12:33, 8 December 2012



Introduction

Request logs are a record of the requests that the server has processed. There is one entry per request received, and commonly in the standard NCSA format so they can be conveniently analysed by tools like webalizer.

Details

Request Log Entry

A standard request log entry includes the client IP, date, method, URL, result, size, referrer and user agent. eg:

 123.4.5.6 - - [27/Aug/2004:10:16:17 +0000]
  "GET /jetty/tut/XmlConfiguration.html HTTP/1.1"
  200 76793 "http://localhost:8080/jetty/tut/logging.html"
  "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8"

Implementations

Jetty provides an implementation called NCSARequestLog which supports the NCSA format in files that can be rolled over on a daily basis.

The logback project offers another implementation of RequestLog interface providing very rich and powerful HTTP-access log functionality,

Alternatively, if neither of these options suits you, you can implement a custom request logger by implementing Jetty's RequestLog.java interface and plugging it in in similar fashion to the NCSARequestLog, as shown below.

Configuring Request Log

To configure a single request log for the entire Jetty Server instance:

<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 id="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>

The equivalent code is:

HandlerCollection handlers = new HandlerCollection();
ContextHandlerCollection contexts = new ContextHandlerCollection();
RequestLogHandler requestLogHandler = new RequestLogHandler();
handlers.setHandlers(new Handler[]{contexts,new DefaultHandler(),requestLogHandler});
server.setHandler(handlers);
 
NCSARequestLog requestLog = new NCSARequestLog("./logs/jetty-yyyy_mm_dd.request.log");
requestLog.setRetainDays(90);
requestLog.setAppend(true);
requestLog.setExtended(false);
requestLog.setLogTimeZone("GMT");
requestLogHandler.setRequestLog(requestLog);

This configures a request log in $JETTY_HOME/logs with filenames including the date. Old log files are kept for 90 days before being deleted. Existing log files are appended to and the extended NCSA format is used in the GMT timezone.

There are many more configuration options available - see NCSARequestLog.java

Additional Resources

Configuring Separate Request Log For Web Application

The following configuration should be added to the <context>.xml file in order to configure a separate request log for a web application.

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ...
  <Set name="handler">
    <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
      <Set name="requestLog">
        <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
          <Set name="filename"><Property name="jetty.logs" default="./logs"/>/test-yyyy_mm_dd.request.log</Set>
          <Set name="filenameDateFormat">yyyy_MM_dd</Set>
          <Set name="LogTimeZone">GMT</Set>
          <Set name="retainDays">90</Set>
          <Set name="append">true</Set>
        </New>
      </Set>
    </New>
  </Set>
  ...
</Configure>