From: Yann Ylavic Date: Fri, 22 May 2015 08:53:31 +0000 (+0000) Subject: Merge r1675533, r1680895, r1680900, r1680942 from trunk. X-Git-Tag: 2.2.30~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fc71063adf9d0b0c1443132a38ac20bbd31a512;p=thirdparty%2Fapache%2Fhttpd.git Merge r1675533, r1680895, r1680900, r1680942 from trunk. r1675533 | breser | 2015-04-23 05:12:30 +0200 (Thu, 23 Apr 2015) | 3 lines mod_log_config: Add %M format to output request duration in milliseconds. r1680895 | rjung | 2015-05-21 17:07:15 +0200 (Thu, 21 May 2015) | 14 lines mod_log_config: instead of using the new dedicated pattern format "%M" for duration milliseconds, overload the existing "%D" to choose the time precision ("%{s}D" for seconds, "%{ms}D" for milliseconds and "%{us}D" for microseconds). The existing %T and %D without precision are kept for compatibility. The previously introduced "%M" (r1677187) is removed, it has not yet been released. Format pattern characters are rare, so we should only use a new one if an existing one isn't a good fit. r1680900 | rjung | 2015-05-21 17:17:50 +0200 (Thu, 21 May 2015) | 2 lines Fix syntax. r1680942 | trawick | 2015-05-21 21:20:44 +0200 (Thu, 21 May 2015) | 5 lines Follow-up to r1680895: Let %T be the format character which accepts time resolution arguments. Reviewed by: ylavic, wrowe, rjung Backported by: ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1681047 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index ead040a60bf..c3d485dd45c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- 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 diff --git a/STATUS b/STATUS index ad5864770e2..a7b97bf2a63 100644 --- a/STATUS +++ b/STATUS @@ -107,13 +107,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: 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 ] diff --git a/docs/manual/mod/mod_log_config.xml b/docs/manual/mod/mod_log_config.xml index 6b71a8fe3a5..1fd816a9325 100644 --- a/docs/manual/mod/mod_log_config.xml +++ b/docs/manual/mod/mod_log_config.xml @@ -184,6 +184,15 @@ %T The time taken to serve the request, in seconds. + %{UNIT}T + The time taken to serve the request, in a time unit given by + UNIT. Valid units are ms for milliseconds, + us for microseconds, and s for seconds. + Using s gives the same result as %T + without any format; using us gives the same result + as %D. Combining %T with a unit is + available in 2.2.30 and later. + %u Remote user (from auth; may be bogus if return status (%s) is 401) diff --git a/modules/loggers/mod_log_config.c b/modules/loggers/mod_log_config.c index 058a306deda..21ae6760569 100644 --- a/modules/loggers/mod_log_config.c +++ b/modules/loggers/mod_log_config.c @@ -104,6 +104,9 @@ * %...{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. @@ -662,18 +665,30 @@ static const char *log_request_time(request_rec *r, char *a) } } -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. */ @@ -1574,7 +1589,7 @@ static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp) 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);