-*- coding: utf-8 -*-
Changes with Apache 2.2.30
+ *) mod_log_config: Add "%{UNIT}T" format to output request duration in
+ seconds, milliseconds or microseconds depending on UNIT ("s", "ms", "us").
+ [Ben Reser, Rainer Jung]
+
*) In alignment with RFC 7525, the default recommended SSLCipherSuite
and SSLProxyCipherSuite now exclude RC4 as well as MD5. Also, the
default recommended SSLProtocol and SSLProxyProtocol directives now
2.2.x patch: http://people.apache.org/~wrowe/httpd-2.2-utf8-servicename.patch
+1: wrowe, gsmith
- * mod_log_config: Add new format flag for requestion duration in milliseconds
- trunk patch: http://svn.apache.org/r1675533
- 2.2.x patch: http://people.apache.org/~ylavic/httpd-2.2.x-mod_log_config-time_taken_fmt.patch
- (modulo CHANGES)
- +1: ylavic, wrowe, rjung
- rjung: Please adjust version number in compatibility hint.
-
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
<tr><td><code>%T</code></td>
<td>The time taken to serve the request, in seconds.</td></tr>
+ <tr><td><code>%{<var>UNIT</var>}T</code></td>
+ <td>The time taken to serve the request, in a time unit given by
+ <code>UNIT</code>. Valid units are <code>ms</code> for milliseconds,
+ <code>us</code> for microseconds, and <code>s</code> for seconds.
+ Using <code>s</code> gives the same result as <code>%T</code>
+ without any format; using <code>us</code> gives the same result
+ as <code>%D</code>. Combining <code>%T</code> with a unit is
+ available in 2.2.30 and later.</td></tr>
+
<tr><td><code>%u</code></td>
<td>Remote user (from auth; may be bogus if return status
(<code>%s</code>) is 401)</td></tr>
* %...{format}t: The time, in the form given by format, which should
* be in strftime(3) format.
* %...T: the time taken to serve the request, in seconds.
+ * %...{s}T: the time taken to serve the request, in seconds, same as %T.
+ * %...{us}T: the time taken to serve the request, in micro seconds, same as %D.
+ * %...{ms}T: the time taken to serve the request, in milliseconds.
* %...D: the time taken to serve the request, in micro seconds.
* %...u: remote user (from auth; may be bogus if return status (%s) is 401)
* %...U: the URL path requested.
}
}
-static const char *log_request_duration(request_rec *r, char *a)
-{
- apr_time_t duration = apr_time_now() - r->request_time;
- return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, apr_time_sec(duration));
-}
-
static const char *log_request_duration_microseconds(request_rec *r, char *a)
{
return apr_psprintf(r->pool, "%" APR_TIME_T_FMT,
(apr_time_now() - r->request_time));
}
+static const char *log_request_duration_scaled(request_rec *r, char *a)
+{
+ apr_time_t duration = apr_time_now() - r->request_time;
+ if (*a == '\0' || !strcasecmp(a, "s")) {
+ duration = apr_time_sec(duration);
+ }
+ else if (!strcasecmp(a, "ms")) {
+ duration = apr_time_as_msec(duration);
+ }
+ else if (!strcasecmp(a, "us")) {
+ }
+ else {
+ /* bogus format */
+ return a;
+ }
+ return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, duration);
+}
+
/* These next two routines use the canonical name:port so that log
* parsers don't need to duplicate all the vhost parsing crud.
*/
log_pfn_register(p, "k", log_requests_on_connection, 0);
log_pfn_register(p, "r", log_request_line, 1);
log_pfn_register(p, "D", log_request_duration_microseconds, 1);
- log_pfn_register(p, "T", log_request_duration, 1);
+ log_pfn_register(p, "T", log_request_duration_scaled, 1);
log_pfn_register(p, "U", log_request_uri, 1);
log_pfn_register(p, "s", log_status, 1);
log_pfn_register(p, "R", log_handler, 1);