View Javadoc

1   // ========================================================================
2   // Copyright (c) 2006-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.server.handler; 
15  
16  import java.io.IOException;
17  
18  import javax.servlet.ServletException;
19  import javax.servlet.http.HttpServletRequest;
20  import javax.servlet.http.HttpServletResponse;
21  
22  import org.eclipse.jetty.server.DispatcherType;
23  import org.eclipse.jetty.server.Request;
24  import org.eclipse.jetty.server.RequestLog;
25  import org.eclipse.jetty.server.Response;
26  import org.eclipse.jetty.server.Server;
27  import org.eclipse.jetty.util.log.Log;
28  
29  
30  
31  /** 
32   * RequestLogHandler.
33   * This handler can be used to wrap an individual context for context logging.
34   * 
35   * 
36   * @org.apache.xbean.XBean
37   */
38  public class RequestLogHandler extends HandlerWrapper
39  {
40      private RequestLog _requestLog;
41      
42      /* ------------------------------------------------------------ */
43      /* 
44       * @see org.eclipse.jetty.server.server.Handler#handle(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, int)
45       */
46      @Override
47      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
48              throws IOException, ServletException
49      {
50          super.handle(target, baseRequest, request, response);
51          if (DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()) && _requestLog!=null)
52              _requestLog.log((Request)request, (Response)response);
53      }
54  
55      /* ------------------------------------------------------------ */
56      public void setRequestLog(RequestLog requestLog)
57      {
58          //are we changing the request log impl?
59          try
60          {
61              if (_requestLog != null)
62                  _requestLog.stop();
63          }
64          catch (Exception e)
65          {
66              Log.warn (e);
67          }
68          
69          if (getServer()!=null)
70              getServer().getContainer().update(this, _requestLog, requestLog, "logimpl",true);
71          
72          _requestLog = requestLog;
73          
74          //if we're already started, then start our request log
75          try
76          {
77              if (isStarted() && (_requestLog != null))
78                  _requestLog.start();
79          }
80          catch (Exception e)
81          {
82              throw new RuntimeException (e);
83          }
84      }
85  
86      /* ------------------------------------------------------------ */
87      /* 
88       * @see org.eclipse.jetty.server.server.handler.HandlerWrapper#setServer(org.eclipse.jetty.server.server.Server)
89       */
90      @Override
91      public void setServer(Server server)
92      {
93          if (_requestLog!=null)
94          {
95              if (getServer()!=null && getServer()!=server)
96                  getServer().getContainer().update(this, _requestLog, null, "logimpl",true);
97              super.setServer(server);
98              if (server!=null && server!=getServer())
99                  server.getContainer().update(this, null,_requestLog, "logimpl",true);
100         }
101         else
102             super.setServer(server);
103     }
104 
105     /* ------------------------------------------------------------ */
106     public RequestLog getRequestLog() 
107     {
108         return _requestLog;
109     }
110 
111     /* ------------------------------------------------------------ */
112     /* 
113      * @see org.eclipse.jetty.server.server.handler.HandlerWrapper#doStart()
114      */
115     @Override
116     protected void doStart() throws Exception
117     {
118         super.doStart();
119         if (_requestLog!=null)
120             _requestLog.start();
121     }
122 
123     /* ------------------------------------------------------------ */
124     /* 
125      * @see org.eclipse.jetty.server.server.handler.HandlerWrapper#doStop()
126      */
127     @Override
128     protected void doStop() throws Exception
129     {
130         super.doStop();
131         if (_requestLog!=null)
132             _requestLog.stop();
133     }
134 
135     
136 }