Configure > Access Log Directives
This document describes the configuration directives of the access_log handler.
- Description:
-
The directive sets the path and optionally the format of the access log.
If the supplied argument is a scalar, it is treated as the path of the log file, or if the value starts with a
|, it is treated as a command to which the log should be emitted.Example. Emit access log to fileaccess-log: /path/to/access-log-fileExample. Emit access log through pipeaccess-log: "| rotatelogs /path/to/access-log-file.%Y%m%d 86400"If the supplied argument is a mapping, its
pathproperty is considered as the path of the log file or the pipe command, and theformatproperty is treated as the format of the log file.Example. Emit access log to file using Common Log Formataccess-log: path: /path/to/access-log-file format: "%h %l %u %t \"%r\" %s %b"The list of format strings recognized by H2O is as follows.
Format String Description %%the percent sign %Alocal address (e.g. 4.5.6.7)%bsize of the response body in bytes %Hrequest protocol as sent by the client (e.g. HTTP/1.1)%hremote address (e.g. 1.2.3.4)%lremote logname (always -)%mrequest method (e.g. GET,POST)%plocal port %qquery string ( ?is prepended if exists, otherwise an empty string)%rrequest line (e.g. GET / HTTP/1.1)%sstatus code (e.g. 200)%ttime when the request was received in format: [02/Jan/2006:15:04:05 -0700]%{FORMAT}ttime when the request was received using the specified format. FORMATshould be an argument tostrftime, or one of:
As an example, it is possible to log timestamps in millisecond resolution usingsecnumber of seconds since Epoch msecnumber of milliseconds since Epoch usecnumber of microseconds since Epoch msec_fracmillisecond fraction usec_fracmicrosecond fraction %{%Y/%m/%d:%H:%M:%S}t.%{msec_frac}t, which results in a timestamp like2006-01-02:15:04:05.000.%Urequested URL path, not including the query string %uremote user if the request was authenticated (always -)%Vrequested server name (or the default server name if not specified by the client) %vcanonical server name %{HEADERNAME}ivalue of the given request header (e.g. %{user-agent}i)%{HEADERNAME}ovalue of the given response header (e.g. %{set-cookie}o)%{NAME}xvarious extensions. NAMEmust be one listed in the following tables. A dash (-) is emitted if the directive is not applicable to the request being logged.Access Timings Name Description connect-timetime spent to establish the connection (i.e. since connection gets accept(2)-ed until first octet of the request is received)request-header-timetime spent receiving request headers request-body-timetime spent receiving request body request-total-timesum of request-header-timeandrequest-body-timeprocess-timetime spent after receiving request, before starting to send response response-timetime spent sending response durationsum of request-total-time,process-time,response-timeConnection (since v2.0) Name Description connection-id64-bit internal ID assigned to every client connection ssl.protocol-versionSSL protocol version obtained from SSL_get_versionssl.session-reused1if the SSL session was reused, or0if not1ssl.ciphername of the cipher suite being used, obtained from SSL_CIPHER_get_name ssl.cipher-bitsstrength of the cipher suite in bits HTTP/2 (since v2.0) Name Description http2.stream-idstream ID http2.priority.receivedcolon-concatenated values of exclusive, parent, weight http2.priority.received.exclusiveexclusive bit of the most recent priority specified by the client http2.priority.received.parentparent stream ID of the most recent priority specified by the client http2.priority.received.weightweight of the most recent priority specified by the client Miscellaneous Name Description errorrequest-level errors. Unless specified otherwise by using the error-log.emit-request-errorsdirective, the same messages are emitted to the error-log. (since v2.1)The default format is
%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i", a.k.a. the NCSA extended/combined log format.Note that you may need to quote (and escape) the format string as required by YAML (see Yaml Cookbook).
- Level:
- global, host, path, extension
- See also:
error-logerror-log.emit-request-errors
Notes:
- A single SSL connection may transfer more than one HTTP request.