View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.server.handler;
20  
21  import java.io.IOException;
22  
23  import javax.servlet.DispatcherType;
24  import javax.servlet.ServletException;
25  import javax.servlet.http.HttpServletRequest;
26  import javax.servlet.http.HttpServletResponse;
27  
28  import org.eclipse.jetty.server.HttpChannelState;
29  import org.eclipse.jetty.server.Request;
30  import org.eclipse.jetty.server.RequestLog;
31  import org.eclipse.jetty.server.Response;
32  import org.eclipse.jetty.util.log.Log;
33  import org.eclipse.jetty.util.log.Logger;
34  
35  
36  
37  /**
38   * RequestLogHandler.
39   * This handler can be used to wrap an individual context for context logging.
40   *
41   *
42   * @org.apache.xbean.XBean
43   */
44  public class RequestLogHandler extends HandlerWrapper
45  {
46      private static final Logger LOG = Log.getLogger(RequestLogHandler.class);
47  
48      private RequestLog _requestLog;
49  
50      /* ------------------------------------------------------------ */
51      /*
52       * @see org.eclipse.jetty.server.server.Handler#handle(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, int)
53       */
54      @Override
55      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
56              throws IOException, ServletException
57      {
58          HttpChannelState continuation = baseRequest.getHttpChannelState();
59          if (!continuation.isInitial())
60          {
61              baseRequest.setDispatchTime(System.currentTimeMillis());
62          }
63  
64          try
65          {
66              super.handle(target, baseRequest, request, response);
67          }
68          finally
69          {
70              if (_requestLog != null && DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()))
71              {
72                  _requestLog.log(baseRequest, (Response)response);
73              }
74          }
75      }
76  
77      /* ------------------------------------------------------------ */
78      public void setRequestLog(RequestLog requestLog)
79      {
80          updateBean(_requestLog,requestLog);
81          _requestLog=requestLog;
82      }
83  
84      /* ------------------------------------------------------------ */
85      public RequestLog getRequestLog()
86      {
87          return _requestLog;
88      }
89  
90  }