4.6.2. Zugriffslog
Der Server unterstützt aber ein anpassbares Zugriffslog. Standardmäßig wird hier das „Common Log Format“ verwendet. Dieses wurde bereits mit den ersten Webservern definiert und ist sehr weit verbreitet. Viele Auswertewerkzeuge setzen hierauf auf. Das Access-Log kann aber beim Apache auch angepasst werden. Man spricht dann von „Custom Log Formats“.
4.6.2.1. Grundlegende Struktur
Der Aufbau und die Ablage des Logfiles wird in zwei Schritten definiert. Mit der Anweisung

     LogFormat    "FORMATSTRING"       NICKNAME
     
wird der Aufbau einer Zeile beschrieben. Der NICKNAME kommt im Zusammenhang mit der Anweisung

     CustomLog   FILE|PIPE                    NICKNAME

wieder zum Tragen, der nicht nur die Lage und den Namen der Datei, sondern auch das Format festlegt.
Im Gegenzug dazu wird bei der Anweisung

     TransferLog FILE|PIPE

das letzte definierte Logfileformat verwendet.
4.6.2.2. Standard Formate
Das  „Common Log Format“ kann über die folgenden Einträge aktiviert werden:

          LogFormat "%h %l %u %t \"%r\" %>s %b" common
          CustomLog /LAGE/DER/LOGDATEI/access_log common

Für jede Anfrage wird eine neue Zeile erzeugt. Diese besteht aus den folgenden Einträgen:

          host ident authuser date request status bytes

Wenn ein Wert nicht bestimmt werden kann, wird ein „-“ eingefügt.

host
FQDN oder IP des anfragenden Clients.
ident
Wenn der Client eine Ident-Abfrage unterstützt und diese aktiviert wurde, ist dies der Nutzername des anfragenden Benutzers auf der entfernten Maschine.
authuser
Wenn eine Authentifikation notwendig war, ist dies der akzeptierte Nutzername.
date
Datum der Anfrage. Format:  [day/month/year:hour:minute:second zone]
request
Der Request des Clients
status
Der http-Statuscode, der vom Server zurückgegeben wurde
bytes
Die Anzahl an Bytes, die an den Client gesendet wurden (Netto! d.h. ohne Header usw.)


Weitere "traditionelle" Logs sind das Referrer-Log, das Agent-Log und das Combined-Log. Alle diese Logformate sind in der Beispielkonfiguration bereits beschrieben:

     LogFormat "%{Referer}i -> %U" referer
     LogFormat "%{User-agent}i" agent
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
4.6.2.3. Individuelle Formate
Der Formatstring beschreibt den Aufbau einer Logzeile. Er kann normale Zeichen beinhalten, genauso wie „%“-Anweisungen, die als Platzhalter dienen und dann durch die Daten des Request ersetzt werden (Ähnlich wie der Formatstring in den printf-Anweisungen der Sprache „C“).  Folgende Werte werden in dem Formatstring interpretiert (Auswahl!):

Platzhalter
Beschreibung
%...a
anfragende IP (remote)
%...A
angefragte IP  (local)
%...b
Übertragene Bytes (Netto, d.h. ohne Header)
%...{Foobar}C
Wert des Cookies "Foobar"
%...D
Bearbeitungsdauer zum Parsen der Anfrage (in ms)
%...{UMGEB}e
Inhalt der Umgebungsvariable UMGEB
%...f
Dateiname
%...h
FQDN des Anfragenden Host
%...{UMGEB}i
Inhalt der „UMGEB:“-HTTP-Headerzeile der Anfrage
%...l
Remote Username (Ident)
%...{UMGEB}o
Inhalt der „UMGEB:“-HTTP-Headerzeile der Antwort
%...p
Port des Servers, der die Anfrage beantwortet hat
%...{pid|tid}P
PID oder Thread-ID des Servers, der die Anfrage beantwortet hat
%...q
GET-String (nach '?')
%...r
Request
%...s
HTTP-Status der Antwort auf das Originalrequest
%...t
Zeitmarke im „Common Logfile Format“ Stil
%...{format}t
Zeitmarke im  Stil „format“. Das Format wird entsprechend strftime(3) angegeben.
%...T
Bearbeitungsdauer der Anfrage (in Sekunden)
%...u
Authentifizierter Nutzername
%...U
Angefragte URL
%...v
Name des bearbeitenden Servers
 
%...I
Bytes eingehend (inkl. Header) [erfordert mod_logio]
%...O
Bytes ausgehend (inkl. Header) [erfordert mod_logio]


Die „...” stehen für mögliche Bedingungen unter denen der Platzhalter ersetzt werden soll, oder ein „-“ eingefügt werden soll (HTTP-Status-Code oder !HTTP-Status-Code). Also z.B. "%400,501{User-agent}i" protokolliert den User-Agenten bei 400er oder 501-Fehlern oder "%!200,304,302{Referer}i" protokolliert den Referer bei allen Anfragen, die nicht den normalen Status-Code wiederholen.

Anmerkung: Eventuelle Sonderzeichen werden in \xhh Sequenzen, d.h. in einer hexadezimalen Repräsentation abgespeichert. Ausnahme sind '"' und '\', die jeweils durch einen vorausgesetzten '\' maskiert werden und die Whitespace-Zeichen werden in C-Notation codiert.