On 05/21/2015 11:07 AM, rj...@apache.org wrote:
Author: rjung
Date: Thu May 21 15:07:15 2015
New Revision: 1680895

URL: http://svn.apache.org/r1680895
Log:
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.

Modified:
     httpd/httpd/trunk/docs/manual/mod/mod_log_config.xml
     httpd/httpd/trunk/modules/loggers/mod_log_config.c

Modified: httpd/httpd/trunk/docs/manual/mod/mod_log_config.xml
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_log_config.xml?rev=1680895&r1=1680894&r2=1680895&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_log_config.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_log_config.xml Thu May 21 15:07:15 
2015
@@ -95,6 +95,16 @@
      <tr><td><code>%D</code></td>
          <td>The time taken to serve the request, in microseconds.</td></tr>
+ <tr><td><code>%{<var>UNIT</var>}D</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>us</code> gives the same result as <code>%D</code>
+        without any format, using <code>s</code> gives teh same result
+        as <code>%T</code>. Combining <code>%D</code> with a unit is
+        available in 2.4.13 and later.</td></tr>
+        </td></tr>
+
      <tr><td><code>%{<var>VARNAME</var>}e</code></td>
          <td>The contents of the environment variable
          <var>VARNAME</var>.</td></tr>
@@ -146,10 +156,6 @@
      <tr><td><code>%m</code></td>
          <td>The request method.</td></tr>
- <tr><td><code>%M</code></td>
-        <td>The time taken to serve the request, in milliseconds.
-        (available in 2.4.13 and later)</td></tr>
-

This is a very nice improvement over introducing "M", and Yann's suggestion to expand "T" instead of "D" is an increment above that.

Any concerns if I switch them out?

      <tr><td><code>%{<var>VARNAME</var>}n</code></td>
          <td>The contents of note <var>VARNAME</var> from another
          module.</td></tr>

Modified: httpd/httpd/trunk/modules/loggers/mod_log_config.c
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/loggers/mod_log_config.c?rev=1680895&r1=1680894&r2=1680895&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/loggers/mod_log_config.c (original)
+++ httpd/httpd/trunk/modules/loggers/mod_log_config.c Thu May 21 15:07:15 2015
@@ -101,8 +101,10 @@
   * %...{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.
- * %...M:  the time taken to serve the request, in milliseconds
   * %...D:  the time taken to serve the request, in micro seconds.
+ * %...{s}D:  the time taken to serve the request, in seconds, same as %T.
+ * %...{us}D:  the time taken to serve the request, in micro seconds, same as 
%D.
+ * %...{ms}D:  the time taken to serve the request, in milliseconds.
   * %...u:  remote user (from auth; may be bogus if return status (%s) is 401)
   * %...U:  the URL path requested.
   * %...v:  the configured name of the server (i.e. which virtual host?)
@@ -803,17 +805,22 @@ static const char *log_request_duration(
      return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, apr_time_sec(duration));
  }
-static const char *log_request_duration_milliseconds(request_rec *r, char *a)
+static const char *log_request_duration_scaled(request_rec *r, char *a)
  {
      apr_time_t duration = get_request_end_time(r) - r->request_time;
-    return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, 
apr_time_as_msec(duration));
-}
-
-
-static const char *log_request_duration_microseconds(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "%" APR_TIME_T_FMT,
-                        (get_request_end_time(r) - r->request_time));
+    if (*a == '\0' || !strcasecmp(a, "us")) {
+    }
+    else if (!strcasecmp(a, "ms")) {
+        duration = apr_time_as_msec(duration);
+    }
+    else if (!strcasecmp(a, "s")) {
+        duration = apr_time_sec(duration);
+    }
+    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
@@ -1844,8 +1851,7 @@ static int log_pre_config(apr_pool_t *p,
          log_pfn_register(p, "C", log_cookie, 0);
          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, "M", log_request_duration_milliseconds, 1);
+        log_pfn_register(p, "D", log_request_duration_scaled, 1);
          log_pfn_register(p, "T", log_request_duration, 1);
          log_pfn_register(p, "U", log_request_uri, 1);
          log_pfn_register(p, "s", log_status, 1);



Reply via email to