Commit 2e253df5 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Merge r1680895, r1680900, r1680942 from trunk:

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.


Fix syntax.


Follow-up to r1680895:

Let %T be the format character which accepts time resolution
arguments.

Submitted by: rjung, trawick
Reviewed/backported by: jim


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1681106 13f79535-47bb-0310-9956-ffa450edef68
parent ee4ed95a
Loading
Loading
Loading
Loading
+3 −2
Changes for CHANGES: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -49,8 +49,9 @@ Changes with Apache 2.4.13
     deprecation warnings, when encountered in a VirtualHost block.
     [Falco Schwarz <hiding falco.me>]

  *) mod_log_config: Add %M format to output request duration in
     milliseconds.  [Ben Reser]
  *) 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]

  *) Allow FallbackResource to work when a directory is requested and
     there is no autoindex nor DirectoryIndex. 
+0 −15
Changes for STATUS: 0 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -113,21 +113,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
     2.4.x patch: trunk works (modulo CHANGES)
     +1: ylavic, minfrin, jkaluza, wrowe

  *) mod_log_config: instead of using the dedicated pattern format "%M" for
     duration milliseconds, overload the existing "%T" to choose the time
     precision ("%{s}T" for seconds, "%{ms}T" for milliseconds and
     "%{us}T" for microseconds). The existing %T and %D without precision
     are kept for compatibility. The previously introduced "%M" 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.
     trunk patch: http://svn.apache.org/r1680895
                  http://svn.apache.org/r1680900
                  http://svn.apache.org/r1680942
     2.4.x patch: http://people.apache.org/~trawick/mod_log_config-r1680895-r1680900-r1680942-to-2.4.x.txt
                  (trunk works plus CHANGES)
     +1: trawick, ylavic, wrowe, rjung


PATCHES PROPOSED TO BACKPORT FROM TRUNK:
  [ New proposals should be added at the end of the list ]
+9 −4
Changes for docs/manual/mod/mod_log_config.xml: 9 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -146,10 +146,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>

    <tr><td><code>%{<var>VARNAME</var>}n</code></td>
        <td>The contents of note <var>VARNAME</var> from another
        module.</td></tr>
@@ -220,6 +216,15 @@
    <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.4.13 and later.</td></tr>

    <tr><td><code>%u</code></td>
        <td>Remote user if the request was authenticated. May be bogus if return status
        (<code>%s</code>) is 401 (unauthorized).</td></tr>
+20 −14
Changes for modules/loggers/mod_log_config.c: 20 added lines, 14 removed lines.
Original line number Diff line number Diff line
@@ -101,7 +101,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.
 * %...M:  the time taken to serve the request, in milliseconds
 * %...{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.
@@ -766,23 +768,28 @@ static const char *log_request_time(request_rec *r, char *a)
    }
}

static const char *log_request_duration(request_rec *r, char *a)
static const char *log_request_duration_microseconds(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_sec(duration));
    return apr_psprintf(r->pool, "%" APR_TIME_T_FMT,
                        (get_request_end_time(r) - r->request_time));
}

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));
    if (*a == '\0' || !strcasecmp(a, "s")) {
        duration = 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,
                        (get_request_end_time(r) - r->request_time));
    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
@@ -1718,8 +1725,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, "M", log_request_duration_milliseconds, 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);