]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Merge r1675533, r1680895, r1680900, r1680942 from trunk.
authorYann Ylavic <ylavic@apache.org>
Fri, 22 May 2015 08:53:31 +0000 (08:53 +0000)
committerYann Ylavic <ylavic@apache.org>
Fri, 22 May 2015 08:53:31 +0000 (08:53 +0000)
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

CHANGES
STATUS
docs/manual/mod/mod_log_config.xml
modules/loggers/mod_log_config.c

diff --git a/CHANGES b/CHANGES
index ead040a60bfe8be9c0455de26fd4bda6a39c8911..c3d485dd45c96168bb7dbe598ea1e311bb415bad 100644 (file)
--- 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 ad5864770e2f0f60636c4af3e44cee2dfd46d5cb..a7b97bf2a6348855e8485af7216bb8083153610d 100644 (file)
--- 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 ]
index 6b71a8fe3a577408a0924455866c84e6ded1e322..1fd816a9325eec4c9859608db9f65f0f5af01741 100644 (file)
     <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>
index 058a306dedabe3b2f67e92a3f4154e8a5f6ac832..21ae6760569d1bdfaffcb9bde22d3148a245c382 100644 (file)
  * %...{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);