<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Copyright 2002-2005 The Apache Software Foundation or its licensors, as
 applicable.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<modulesynopsis metafile="mod_log_config.xml.meta">

<name>mod_log_config</name>
<description>Logging of the requests made to the server</description>
<status>Base</status>
<sourcefile>mod_log_config.c</sourcefile>
<identifier>log_config_module</identifier>

<summary>
    <p>This module provides for flexible logging of client
    requests. Logs are written in a customizable format, and may be
    written directly to a file, or to an external program.
    Conditional logging is provided so that individual requests may
    be included or excluded from the logs based on characteristics
    of the request.</p>

    <p>Three directives are provided by this module:
    <directive module="mod_log_config">TransferLog</directive> to create
    a log file, <directive module="mod_log_config">LogFormat</directive>
    to set a custom format, and <directive module="mod_log_config"
    >CustomLog</directive> to define a log file and format in one
    step. The <directive>TransferLog</directive> and <directive
    >CustomLog</directive> directives can be used multiple times in each
    server to cause each request to be logged to multiple files.</p>
</summary>
<seealso><a href="../logs.html">Apache Log Files</a></seealso>

<section id="formats"><title>Custom Log Formats</title>

    <p>The format argument to the <directive module="mod_log_config"
    >LogFormat</directive> and <directive module="mod_log_config"
    >CustomLog</directive> directives is a string. This string is
    used to log each request to the log file. It can contain literal
    characters copied into the log files and the C-style control
    characters "\n" and "\t" to represent new-lines and tabs.
    Literal quotes and back-slashes should be escaped with
    back-slashes.</p>

    <p>The characteristics of the request itself are logged by
    placing "<code>%</code>" directives in the format string, which are
    replaced in the log file by the values as follows:</p>

    <table border="1" style="zebra">
    <columnspec><column width=".2"/><column width=".8"/></columnspec>
    <tr><th>Format&nbsp;String</th>
        <th>Description</th></tr>

    <tr><td><code>%%</code></td>
        <td>The percent sign</td></tr>

    <tr><td><code>%a</code></td>
        <td>Remote IP-address</td></tr>

    <tr><td><code>%A</code></td>
        <td>Local IP-address</td></tr>

    <tr><td><code>%B</code></td>
        <td>Size of response in bytes, excluding HTTP headers.</td></tr>

    <tr><td><code>%b</code></td>
        <td>Size of response in bytes, excluding HTTP headers. In CLF format, <em>i.e.</em>
        a '<code>-</code>' rather than a 0 when no bytes are sent.</td></tr>

    <tr><td><code>%{<var>Foobar</var>}C</code></td>
        <td>The contents of cookie <var>Foobar</var> in the request sent
        to the server.</td></tr>

    <tr><td><code>%D</code></td>
        <td>The time taken to serve the request, in microseconds.</td></tr>

    <tr><td><code>%{<var>FOOBAR</var>}e</code></td>
        <td>The contents of the environment variable
        <var>FOOBAR</var></td></tr>

    <tr><td><code>%f</code></td>
        <td>Filename</td></tr>

    <tr><td><code>%h</code></td>
        <td>Remote host</td></tr>

    <tr><td><code>%H</code></td>
        <td>The request protocol</td></tr>

    <tr><td><code>%{<var>Foobar</var>}i</code></td>
        <td>The contents of <code><var>Foobar</var>:</code> header line(s)
        in the request sent to the server.</td></tr>

    <tr><td><code>%l</code></td>
        <td>Remote logname (from identd, if supplied). This will return a
        dash unless <module>mod_ident</module> is present and <directive
        module="mod_ident">IdentityCheck</directive> is set
        <code>On</code>.</td></tr>

    <tr><td><code>%m</code></td>
        <td>The request method</td></tr>

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

    <tr><td><code>%{<var>Foobar</var>}o</code></td>
        <td>The contents of <code><var>Foobar</var>:</code> header line(s)
        in the reply.</td></tr>

    <tr><td><code>%p</code></td>
        <td>The canonical port of the server serving the request</td></tr>

    <tr><td><code>%P</code></td>
        <td>The process ID of the child that serviced the request.</td></tr>

    <tr><td><code>%{<var>format</var>}P</code></td>
        <td>The process ID or thread id of the child that serviced the 
        request.  Valid formats are <code>pid</code>, <code>tid</code>,
        and <code>hextid</code>.  <code>hextid</code> requires APR 1.2.0 or 
        higher.
        </td></tr>

    <tr><td><code>%q</code></td>
        <td>The query string (prepended with a <code>?</code> if a query
        string exists, otherwise an empty string)</td></tr>

    <tr><td><code>%r</code></td>
        <td>First line of request</td></tr>

    <tr><td><code>%s</code></td>
        <td>Status. For requests that got internally redirected, this is
        the status of the *original* request --- <code>%&gt;s</code>
        for the last.</td></tr>

    <tr><td><code>%t</code></td>
        <td>Time the request was received (standard english
        format)</td></tr>

    <tr><td><code>%{<var>format</var>}t</code></td>
        <td>The time, in the form given by format, which should be in
        <code>strftime(3)</code> format. (potentially localized)</td></tr>

    <tr><td><code>%T</code></td>
        <td>The time taken to serve the request, in seconds.</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>

    <tr><td><code>%U</code></td>
        <td>The URL path requested, not including any query string.</td></tr>

    <tr><td><code>%v</code></td>
        <td>The canonical <directive module="core">ServerName</directive>
        of the server serving the request.</td></tr>

    <tr><td><code>%V</code></td>
        <td>The server name according to the <directive module="core"
        >UseCanonicalName</directive> setting.</td></tr>

    <tr><td><code>%X</code></td>
        <td>Connection status when response is completed:

        <table>
        <columnspec><column width=".2"/><column width=".6"/></columnspec>
        <tr><td><code>X</code> =</td>
            <td>connection aborted before the response completed.</td></tr>
        <tr><td><code>+</code> =</td>
            <td>connection may be kept alive after the response is
            sent.</td></tr>
        <tr><td><code>-</code> = </td>
            <td>connection will be closed after the response is
            sent.</td></tr>
        </table>

        <p>(This directive was <code>%c</code> in late versions of Apache
        1.3, but this conflicted with the historical ssl
        <code>%{<var>var</var>}c</code> syntax.)</p></td></tr>

    <tr><td><code>%I</code></td>
        <td>Bytes received, including request and headers, cannot be zero.
        You need to enable <module>mod_logio</module> to use this.</td></tr>

    <tr><td><code>%O</code></td>
        <td>Bytes sent, including headers, cannot be zero. You need to
        enable <module>mod_logio</module> to use this.</td></tr>
    </table>

    <section id="modifiers"><title>Modifiers</title>

      <p>Particular items can be restricted to print only for
      responses with specific HTTP status codes by placing a
      comma-separated list of status codes immediately following the
      "%".  For example, <code>"%400,501{User-agent}i"</code> logs
      <code>User-agent</code> on 400 errors and 501 errors only.  For
      other status codes, the literal string <code>"-"</code> will be
      logged.  The status code list may be preceded by a
      "<code>!</code>" to indicate negation:
      <code>"%!200,304,302{Referer}i"</code> logs <code>Referer</code>
      on all requests that do <em>not</em> return one of the three
      specified codes.</p>

      <p>The modifiers "&lt;" and "&gt;" can be used for requests that
      have been internally redirected to choose whether the original
      or final (respectively) request should be consulted.  By
      default, the <code>%</code> directives <code>%s, %U, %T,
      %D,</code> and <code>%r</code> look at the original request
      while all others look at the final request.  So for example,
      <code>%&gt;s</code> can be used to record the final status of
      the request and <code>%&lt;u</code> can be used to record the
      original authenticated user on a request that is internally
      redirected to an unauthenticated resource.</p>

    </section>

    <section id="format-notes"><title>Some Notes</title>

      <p>For security reasons, starting with version 2.0.46,
      non-printable and other special characters in <code>%r</code>,
      <code>%i</code> and <code>%o</code> are escaped using
      <code>\x<var>hh</var></code> sequences, where <var>hh</var>
      stands for the hexadecimal representation of the raw
      byte. Exceptions from this rule are <code>"</code> and
      <code>\</code>, which are escaped by prepending a backslash, and
      all whitespace characters, which are written in their C-style
      notation (<code>\n</code>, <code>\t</code>, etc).  In versions
      prior to 2.0.46, no escaping was performed on these strings so
      you had to be quite careful when dealing with raw log files.</p>

      <p>In httpd 2.0, unlike 1.3, the <code>%b</code> and
      <code>%B</code> format strings do not represent the number of
      bytes sent to the client, but simply the size in bytes of the
      HTTP response (which will differ, for instance, if the
      connection is aborted, or if SSL is used).  The <code>%O</code>
      format provided by <module>mod_logio</module> will log the
      actual number of bytes sent over the network.</p>

    </section>

    <section id="examples"><title>Examples</title>

      <p>Some commonly used log format strings are:</p>

      <dl>
        <dt>Common Log Format (CLF)</dt>
        <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>

        <dt>Common Log Format with Virtual Host</dt>
        <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>

        <dt>NCSA extended/combined log format</dt>
        <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
        \"%{User-agent}i\""</code></dd>

        <dt>Referer log format</dt>
        <dd><code>"%{Referer}i -&gt; %U"</code></dd>

        <dt>Agent (Browser) log format</dt>
        <dd><code>"%{User-agent}i"</code></dd>
      </dl>
    </section>
</section>

<section id="security"><title>Security Considerations</title>
    <p>See the <a
    href="../misc/security_tips.html#serverroot">security tips</a>
    document for details on why your security could be compromised
    if the directory where logfiles are stored is writable by
    anyone other than the user that starts the server.</p>
</section>

<directivesynopsis>
<name>BufferedLogs</name>
<description>Buffer log entries in memory before writing to disk</description>
<syntax>BufferedLogs On|Off</syntax>
<default>BufferedLogs Off</default>
<contextlist><context>server config</context></contextlist>
<status>Experimental</status>
<compatibility>Available in versions 2.0.41 and later.</compatibility>

<usage>
    <p>The <directive>BufferedLogs</directive> directive causes
    <module>mod_log_config</module> to store several log entries in
    memory and write them together to disk, rather than writing them
    after each request.  On some systems, this may result in more
    efficient disk access and hence higher performance.  It may be
    set only once for the entire server; it cannot be configured
    per virtual-host.</p>

    <note>This directive is experimental and should be used with
    caution.</note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>CookieLog</name>
<description>Sets filename for the logging of cookies</description>
<syntax>CookieLog <var>filename</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>This directive is deprecated.</compatibility>

<usage>
    <p>The <directive>CookieLog</directive> directive sets the 
    filename for logging of cookies. The filename is relative to the
    <directive module="core">ServerRoot</directive>. This directive is
    included only for compatibility with <code>mod_cookies</code>,
    and is deprecated.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>CustomLog</name>
<description>Sets filename and format of log file</description>
<syntax>CustomLog  <var>file</var>|<var>pipe</var>
<var>format</var>|<var>nickname</var>
[env=[!]<var>environment-variable</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive>CustomLog</directive> directive is used to
    log requests to the server. A log format is specified, and the
    logging can optionally be made conditional on request
    characteristics using environment variables.</p>

    <p>The first argument, which specifies the location to which
    the logs will be written, can take one of the following two
    types of values:</p>

    <dl>
      <dt><var>file</var></dt>
      <dd>A filename, relative to the <directive module="core"
      >ServerRoot</directive>.</dd>

      <dt><var>pipe</var></dt>
      <dd>The pipe character "<code>|</code>", followed by the path
      to a program to receive the log information on its standard
      input.

      <note type="warning"><title>Security:</title>
      <p>If a program is used, then it will be run as the user who
      started <program>httpd</program>. This will be root if the server was
      started by root; be sure that the program is secure.</p>
      </note>
      <note type="warning"><title>Note</title>
        <p>When entering a file path on non-Unix platforms, care should be taken
        to make sure that only forward slashed are used even though the platform
        may allow the use of back slashes. In general it is a good idea to always 
        use forward slashes throughout the configuration files.</p>
      </note></dd>
    </dl>

    <p>The second argument specifies what will be written to the
    log file. It can specify either a <var>nickname</var> defined by
    a previous <directive module="mod_log_config">LogFormat</directive>
    directive, or it can be an explicit <var>format</var> string as
    described in the <a href="#formats">log formats</a> section.</p>

    <p>For example, the following two sets of directives have
    exactly the same effect:</p>

    <example>
      # CustomLog with format nickname<br />
      LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
      CustomLog logs/access_log common<br />
      <br />
      # CustomLog with explicit format string<br />
      CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
    </example>

    <p>The third argument is optional and controls whether or
    not to log a particular request based on the
    presence or absence of a particular variable in the server
    environment. If the specified <a href="../env.html">environment
    variable</a> is set for the request (or is not set, in the case
    of a '<code>env=!<var>name</var></code>' clause), then the
    request will be logged.</p>

    <p>Environment variables can be set on a per-request
    basis using the <module>mod_setenvif</module>
    and/or <module>mod_rewrite</module> modules. For
    example, if you want to record requests for all GIF
    images on your server in a separate logfile but not in your main
    log, you can use:</p>
    
    <example>
      SetEnvIf Request_URI \.gif$ gif-image<br />
      CustomLog gif-requests.log common env=gif-image<br />
      CustomLog nongif-requests.log common env=!gif-image
    </example>

    <p>Or, to reproduce the behavior of the old RefererIgnore
    directive, you might use the following:</p>

    <example>
    SetEnvIf Referer example\.com localreferer<br />
    CustomLog referer.log referer env=!localreferer
    </example>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>LogFormat</name>
<description>Describes a format for use in a log file</description>
<syntax>LogFormat <var>format</var>|<var>nickname</var>
[<var>nickname</var>]</syntax>
<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>This directive specifies the format of the access log
    file.</p>

    <p>The <directive>LogFormat</directive> directive can take one of two
    forms. In the first form, where only one argument is specified,
    this directive sets the log format which will be used by logs
    specified in subsequent <directive>TransferLog</directive>
    directives. The single argument can specify an explicit
    <var>format</var> as discussed in the <a href="#formats">custom log
    formats</a> section above. Alternatively, it can use a
    <var>nickname</var> to refer to a log format defined in a
    previous <directive>LogFormat</directive> directive as described
    below.</p>

    <p>The second form of the <directive>LogFormat</directive> 
    directive associates an explicit <var>format</var> with a
    <var>nickname</var>. This <var>nickname</var> can then be used in
    subsequent <directive>LogFormat</directive> or
    <directive module="mod_log_config">CustomLog</directive> directives
    rather than repeating the entire format string. A
    <directive>LogFormat</directive> directive that defines a nickname
    <strong>does nothing else</strong> -- that is, it <em>only</em>
    defines the nickname, it doesn't actually apply the format and make
    it the default. Therefore, it will not affect subsequent
    <directive module="mod_log_config">TransferLog</directive> directives.
    In addition, <directive>LogFormat</directive> cannot use one nickname
    to define another nickname. Note that the nickname should not contain
    percent signs (<code>%</code>).</p>

    <example><title>Example</title>
      LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
    </example>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>TransferLog</name>
<description>Specify location of a log file</description>
<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>This directive has exactly the same arguments and effect as
    the <directive module="mod_log_config">CustomLog</directive>
    directive, with the exception that it does not allow the log format
    to be specified explicitly or for conditional logging of requests.
    Instead, the log format is determined by the most recently specified
    <directive module="mod_log_config">LogFormat</directive> directive
    which does not define a nickname. Common Log Format is used if no
    other format has been specified.</p>

    <example><title>Example</title>
      LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
      TransferLog logs/access_log
    </example>
</usage>
</directivesynopsis>

</modulesynopsis>
