293222 Improve request log to handle/show asynchronous latency
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@1916 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
8542e6c7ae
commit
2d08e4d8f9
|
@ -1,6 +1,7 @@
|
||||||
jetty-7.1.4-SNAPSHOT
|
jetty-7.1.4-SNAPSHOT
|
||||||
+ 292326 Stop continuations if server is stopped.
|
+ 292326 Stop continuations if server is stopped.
|
||||||
+ 292814 Make QoSFilter and DoSFilter JMX manageable
|
+ 292814 Make QoSFilter and DoSFilter JMX manageable
|
||||||
|
+ 293222 Improve request log to handle/show asynchronous latency
|
||||||
+ 294212 Can not customize session cookie path
|
+ 294212 Can not customize session cookie path
|
||||||
+ 302350 org.eclipse.jetty.server.NCSARequestLog is missing JavaDoc
|
+ 302350 org.eclipse.jetty.server.NCSARequestLog is missing JavaDoc
|
||||||
+ 304100 Better document JMX setup in jetty-jmx.xml
|
+ 304100 Better document JMX setup in jetty-jmx.xml
|
||||||
|
|
|
@ -61,6 +61,7 @@ public class NCSARequestLog extends AbstractLifeCycle implements RequestLog
|
||||||
private boolean _logLatency = false;
|
private boolean _logLatency = false;
|
||||||
private boolean _logCookies = false;
|
private boolean _logCookies = false;
|
||||||
private boolean _logServer = false;
|
private boolean _logServer = false;
|
||||||
|
private boolean _logDispatch = false;
|
||||||
|
|
||||||
private transient OutputStream _out;
|
private transient OutputStream _out;
|
||||||
private transient OutputStream _fileOut;
|
private transient OutputStream _fileOut;
|
||||||
|
@ -416,6 +417,29 @@ public class NCSARequestLog extends AbstractLifeCycle implements RequestLog
|
||||||
return _filenameDateFormat;
|
return _filenameDateFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/**
|
||||||
|
* Controls logging of the request dispatch time
|
||||||
|
*
|
||||||
|
* @param value true - request dispatch time will be logged
|
||||||
|
* false - request dispatch time will not be logged
|
||||||
|
*/
|
||||||
|
public void setLogDispatch(boolean value)
|
||||||
|
{
|
||||||
|
_logDispatch = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/**
|
||||||
|
* Retrieve request dispatch time logging flag
|
||||||
|
*
|
||||||
|
* @return value of the flag
|
||||||
|
*/
|
||||||
|
public boolean isLogDispatch()
|
||||||
|
{
|
||||||
|
return _logDispatch;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Writes the request and response information to the output stream.
|
* Writes the request and response information to the output stream.
|
||||||
|
@ -569,10 +593,19 @@ public class NCSARequestLog extends AbstractLifeCycle implements RequestLog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final long now = System.currentTimeMillis();
|
||||||
|
final long start = request.getTimeStamp();
|
||||||
|
final long dispatch = request.getDispatchTime();
|
||||||
|
if (_logDispatch)
|
||||||
|
{
|
||||||
|
_writer.write(' ');
|
||||||
|
_writer.write(Long.toString(now - (dispatch==0 ? start:dispatch)));
|
||||||
|
}
|
||||||
|
|
||||||
if (_logLatency)
|
if (_logLatency)
|
||||||
{
|
{
|
||||||
_writer.write(' ');
|
_writer.write(' ');
|
||||||
_writer.write(Long.toString(System.currentTimeMillis() - request.getTimeStamp()));
|
_writer.write(Long.toString(now - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
_writer.write(StringUtil.__LINE_SEPARATOR);
|
_writer.write(StringUtil.__LINE_SEPARATOR);
|
||||||
|
|
|
@ -155,6 +155,7 @@ public class Request implements HttpServletRequest
|
||||||
private HttpSession _session;
|
private HttpSession _session;
|
||||||
private SessionManager _sessionManager;
|
private SessionManager _sessionManager;
|
||||||
private long _timeStamp;
|
private long _timeStamp;
|
||||||
|
private long _dispatchTime;
|
||||||
|
|
||||||
private Buffer _timeStampBuffer;
|
private Buffer _timeStampBuffer;
|
||||||
private HttpURI _uri;
|
private HttpURI _uri;
|
||||||
|
@ -1210,6 +1211,16 @@ public class Request implements HttpServletRequest
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/** Get timestamp of the request dispatch
|
||||||
|
*
|
||||||
|
* @return timestamp
|
||||||
|
*/
|
||||||
|
public long getDispatchTime()
|
||||||
|
{
|
||||||
|
return _dispatchTime;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public boolean isAsyncStarted()
|
public boolean isAsyncStarted()
|
||||||
{
|
{
|
||||||
|
@ -1788,6 +1799,16 @@ public class Request implements HttpServletRequest
|
||||||
_scope=scope;
|
_scope=scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/** Set timetstamp of request dispatch
|
||||||
|
*
|
||||||
|
* @param value timestamp
|
||||||
|
*/
|
||||||
|
public void setDispatchTime(long value)
|
||||||
|
{
|
||||||
|
_dispatchTime = value;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public AsyncContext startAsync() throws IllegalStateException
|
public AsyncContext startAsync() throws IllegalStateException
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,7 @@ import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.server.AsyncContinuation;
|
||||||
import org.eclipse.jetty.server.DispatcherType;
|
import org.eclipse.jetty.server.DispatcherType;
|
||||||
import org.eclipse.jetty.server.Request;
|
import org.eclipse.jetty.server.Request;
|
||||||
import org.eclipse.jetty.server.RequestLog;
|
import org.eclipse.jetty.server.RequestLog;
|
||||||
|
@ -46,10 +47,25 @@ public class RequestLogHandler extends HandlerWrapper
|
||||||
@Override
|
@Override
|
||||||
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
|
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
|
||||||
throws IOException, ServletException
|
throws IOException, ServletException
|
||||||
|
{
|
||||||
|
AsyncContinuation continuation = baseRequest.getAsyncContinuation();
|
||||||
|
if (!continuation.isInitial())
|
||||||
|
{
|
||||||
|
baseRequest.setDispatchTime(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
super.handle(target, baseRequest, request, response);
|
super.handle(target, baseRequest, request, response);
|
||||||
if (DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()) && _requestLog!=null)
|
}
|
||||||
_requestLog.log((Request)request, (Response)response);
|
finally
|
||||||
|
{
|
||||||
|
if (_requestLog != null && DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()))
|
||||||
|
{
|
||||||
|
_requestLog.log(baseRequest, (Response)response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
|
Loading…
Reference in New Issue