blob: 10142fc9928b8ec199c96685730e8700a2c9721e [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Configuring Jetty Request Logs</title><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><meta name="keywords" content="jetty, servlet, servlet-api, cometd, http, websocket, eclipse, maven, java, server, software"><link rel="home" href="index.html" title="Jetty"><link rel="up" href="configuring-logging.html" title="Chapter&nbsp;11.&nbsp;Jetty Logging"><link rel="prev" href="default-logging-with-stderrlog.html" title="Default Logging with Jetty&#8217;s StdErrLog"><link rel="next" href="configuring-logging-modules.html" title="Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)"><link xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" rel="shortcut icon" href="images/favicon.ico"><link rel="stylesheet" href="css/highlighter/foundation.css"><script src="js/highlight.pack.js"></script><script>
hljs.initHighlightingOnLoad();
</script><link type="text/css" rel="stylesheet" href="css/font-awesome/font-awesome.min.css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><tr><td style="width: 25%"><a href="http://www.eclipse.org/jetty"><img src="images/jetty-header-logo.png" alt="Jetty Logo"></a><br><span style="font-size: small">
Version: 9.4.28-SNAPSHOT</span></td><td style="width: 50%"></td></tr></table><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configuring Jetty Request Logs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="default-logging-with-stderrlog.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;11.&nbsp;Jetty Logging<br><a accesskey="p" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="configuring-logging-modules.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr></table><hr></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="jetty-callout"><h5 class="callout"><a href="http://www.webtide.com/">Contact the core Jetty developers at
<span class="website">www.webtide.com</span></a></h5><p>
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ...
scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development
</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="configuring-jetty-request-logs"></a>Configuring Jetty Request Logs</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="configuring-jetty-request-logs.html#constructing-request-log-entry">Constructing a Request Log Entry</a></span></dt><dt><span class="section"><a href="configuring-jetty-request-logs.html#implementing-request-log">Implementing a Request Log</a></span></dt><dt><span class="section"><a href="configuring-jetty-request-logs.html#configuring-request-log">Configuring the Request Log module</a></span></dt><dt><span class="section"><a href="configuring-jetty-request-logs.html#request-log-custom-writer">Introducing RequestLog.Writer</a></span></dt><dt><span class="section"><a href="configuring-jetty-request-logs.html#configuring-separate-request-log-for-web-application">Configuring a Separate Request Log For a Web Application</a></span></dt></dl></div><p>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 you can use tools like <a class="link" href="http://en.wikipedia.org/wiki/Webalizer" target="_top">Webalizer</a> to analyze them conveniently.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="constructing-request-log-entry"></a>Constructing a Request Log Entry</h3></div></div></div><p>A standard request log entry includes the client IP address, date, method, URL, result, size, referrer, user agent and latency.
For example:</p><pre class="literallayout">123.4.5.6 - - [20/Jul/2016: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" 342</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="implementing-request-log"></a>Implementing a Request Log</h3></div></div></div><p>Jetty provides an implementation called <code class="literal">NCSARequestLog</code> which supports the NCSA format in files that will roll over on a daily basis.</p><p>The <a class="link" href="http://logback.qos.ch/" target="_top">Logback Project</a> offers <a class="link" href="http://logback.qos.ch/access.html" target="_top">another implementation</a> of a <code class="literal">RequestLog</code> interface, providing rich and powerful HTTP-access log functionality.</p><p>If neither of these options meets your needs, you can implement a custom request logger by implementing Jetty&#8217;s <a class="link" href="http://www.eclipse.org/jetty/javadoc/9.4.28-SNAPSHOT/org/eclipse/jetty/server/RequestLog.html" target="_top"><code class="literal">RequestLog.java</code></a> interface and plugging it in similar to the <code class="literal">NCSARequestLog</code>, as shown below.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="configuring-request-log"></a>Configuring the Request Log module</h3></div></div></div><p>To enable the Request Log module for the entire server via the Jetty distribution, it first needs to be enabled on the command line:</p><div class="screenexample"><pre class="screen">$ java -jar ../start.jar --add-to-start=requestlog
INFO: requestlog initialised in ${jetty.base}/start.d/requestlog.ini
MKDIR: ${jetty.base}/logs
INFO: Base directory was modified</pre></div><p>The above command will add a new <code class="literal">requestlog.ini</code> file to your <a class="link" href="startup-modules.html#start-vs-startd" title="Start.ini vs. Start.d"><code class="literal">{$jetty.base}/start.d</code> directory</a>.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>By default, request logs are not set to be appended, meaning a the log file is wiped clean upon sever restart.
You can change this setting by editing the <code class="literal">requestlog.ini</code> and un-commenting the line that reads <code class="literal">jetty.requestlog.append=true</code>.</p></div></blockquote></div><p>The equivalent code for embedded usages of Jetty is:</p><pre xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><code>NCSARequestLog requestLog = new NCSARequestLog("/var/logs/jetty/jetty-yyyy_mm_dd.request.log");
requestLog.setAppend(true);
requestLog.setExtended(false);
requestLog.setLogTimeZone("GMT");
requestLog.setLogLatency(true);
requestLog.setRetainDays("90");
server.setRequestLog(requestLog);</code></pre><p>This configures a request log in <code class="literal">{$jetty.home}/logs</code> with filenames including the date.
Existing log files are appended to and the extended NCSA format is used in the GMT time zone.</p><p>The above configuration enables Log Latency, which is the amount of time it took the server to handle the request.
This value is measured in milliseconds and is appended to the the log file for each request.</p><p>You can also customize the number of days you wish to keep request logs.
By default, log files are kept for 90 days before being deleted.
The value for <code class="literal">retainDays</code> (xml) or <code class="literal">setRetainDays</code> (Java) should be configured as <span class="emphasis"><em>1 + n</em></span> days.
For example, if you wanted to keep the logs for the current day and the day prior you would set the <code class="literal">retainDays</code> (or <code class="literal">setRetainDays</code>) value to 2.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="request-log-custom-writer"></a>Introducing RequestLog.Writer</h3></div></div></div><p>The concept of a <code class="literal">RequestLog.Writer</code>, introduced in Jetty 9.4.15, manages the writing to a log the string generated by the <code class="literal">RequestLog</code>.
This allows the <code class="literal">CustomRequestLog</code> to match the functionality of other <code class="literal">RequestLogger</code> implementations by plugging in any <code class="literal">RequestLog.Writer</code> and a custom format string.
Jetty currently has implementations of <code class="literal">RequestLog.Writer</code>, <code class="literal">RequestLogWriter</code>, <code class="literal">AsyncRequestLogWriter</code>, and <code class="literal">Slf4jRequestLogWriter</code>.</p><p>So, the way to create an asynchronous <code class="literal">RequestLog</code> using the extended NCSA format has been changed from:</p><p><code class="literal">new AsyncNcsaRequestLog(filename)</code></p><p>to:</p><p><code class="literal">new CustomRequestLog(new AsyncRequestLogWriter(filename), CustomRequestLog.EXTENDED_NCSA_FORMAT)</code></p><p>Additionally, there are now two settings for the log timezone to be configured.
There is the configuration for logging the request time, which is set in the <code class="literal">timeZone</code> parameter in the <code class="literal">%t</code> format code of the string, given in the format <code class="literal">%{format|timeZone|locale}t</code>.</p><p>The other <code class="literal">timeZone</code> parameter relates to the generation of the log file name (both at creation and roll over).
This is configured in the <code class="literal">requestlog</code> module file, or can be used as a setter on <code class="literal">RequestLogWriter</code> via XML.</p><p>Both timezones are set to GMT by default.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="configuring-separate-request-log-for-web-application"></a>Configuring a Separate Request Log For a Web Application</h3></div></div></div><p>To configure a separate request log for specific a web application, add the following to the context XML file.</p><pre xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><code>&lt;Configure class="org.eclipse.jetty.webapp.WebAppContext"&gt;
...
&lt;Call name="insertHandler"&gt;
&lt;Arg&gt;
&lt;New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"&gt;
&lt;Set name="requestLog"&gt;
&lt;New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog"&gt;
&lt;Set name="filename"&gt;&lt;Property name="jetty.logs" default="./logs"/&gt;/test-yyyy_mm_dd.request.log&lt;/Set&gt;
&lt;Set name="filenameDateFormat"&gt;yyyy_MM_dd&lt;/Set&gt;
&lt;Set name="LogTimeZone"&gt;GMT&lt;/Set&gt;
&lt;Set name="retainDays"&gt;90&lt;/Set&gt;
&lt;Set name="append"&gt;true&lt;/Set&gt;
&lt;Set name="LogLatency"&gt;true&lt;/Set&gt;
&lt;/New&gt;
&lt;/Set&gt;
&lt;/New&gt;
&lt;/Arg&gt;
&lt;/Call&gt;
...
&lt;/Configure&gt;</code></pre></div></div><script type="text/javascript">
SyntaxHighlighter.all()
</script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="default-logging-with-stderrlog.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="configuring-logging.html"><i class="fa fa-chevron-up" aria-hidden="true"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="configuring-logging-modules.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr><tr><td width="40%" align="left" valign="top">Default Logging with Jetty&#8217;s StdErrLog&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Jetty Logging Integrations (SLF4J, Log4j, Logback, JCL, JUL)</td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
See an error or something missing?
<span class="callout"><a href="http://github.com/eclipse/jetty.project">Contribute to this documentation at
<span class="website"><i class="fa fa-github" aria-hidden="true"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2020-03-10)</i></span></div></p></body></html>