Ce module apporte une grande souplesse dans la journalisation des requêtes des clients. Les journaux sont écrits sous un format personnalisable, et peuvent être enregistrés directement dans un fichier, ou redirigés vers un programme externe. La journalisation conditionnelle est supportée, si bien que des requêtes individuelles peuvent être incluses ou exclues des journaux en fonction de leur caractéristiques.
Ce module fournit trois directives :
L'argument format des directives
Les caractéristiques de la requête en elle-même sont journalisées
en insérant des directives "%
" dans la chaîne de
format, celles-ci étant remplacées dans le fichier journal par
certaines valeurs comme suit :
Chaîne de format | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
%% |
Le signe "pourcentage" | ||||||||||
%a |
L'adresse IP distante (voir le module
| ||||||||||
%{c}a |
Adresse IP distante de la connexion(voir le module
| ||||||||||
%A |
L'adresse IP locale | ||||||||||
%B |
La taille de la réponse en octets, en excluant les en-têtes HTTP. | ||||||||||
%b |
La taille de la réponse en octets, en excluant les en-têtes
HTTP. Au format CLF , c'est à dire un '- ' à la
place d'un 0 lorsqu'aucun octet n'est renvoyé. | ||||||||||
%{NOMVAR}C |
Le contenu du cookie NOMVAR dans la requête envoyée au serveur. Seuls les cookies version 0 sont pleinement supportés. | ||||||||||
%D |
Le temps mis à servir la requête, en microsecondes. Voir %T pour plus de détails | ||||||||||
%{NOMVAR}e |
Le contenu de la variable d'environnement NOMVAR | ||||||||||
%f |
Nom de fichier | ||||||||||
%h |
Serveur distant. Contiendra l'adresse IP si la directive
Off , ce qui est sa valeur par défaut. Si cette
adresse IP n'est enregistrée que pour certains serveurs, vous
avez probablement défini des directives de contrôle d'accès qui
mentionnent ces derniers par leurs noms. Voir la documentation de Require
host. Ce format peut être impacté par la modifications
du nom d'hote distant par des modules comme | ||||||||||
%{c}h |
Semblable à %h , mais exploite toujours le nom d'hôte de la connection
TCP sous-jacente, en ignorant toute modification réalisée sur le nom d'hôte distant
par des modules tels que | ||||||||||
%H |
Le protocole de la requête | ||||||||||
%{NOMVAR}i |
Le contenu des lignes d'en-tête
NOMVAR: dans la requête envoyée au
serveur. Ces en-têtes sont ajoutés par d'autres modules (par
exemple %{VARNAME}e décrit plus haut.
| ||||||||||
%k |
Nombre de requêtes persistantes en cours pour cette
connexion. Interessant si la directive | ||||||||||
%l |
Le nom de connexion distant (en provenance d'identd, si
disponible). Affiche un tiret, sauf si
On . | ||||||||||
%L |
L'identifiant du message de journalisation de la requête dans le journal des erreurs (ou '-' si aucun message n'a été enregistré dans le journal des erreurs pour cette requête). Consulter le journal d'erreurs pour voir quelle requête a généré quelle erreur. | ||||||||||
%{c}L |
L'identifiant du message de journalisation de la connexion dans le journal des erreurs (ou '-' si aucun message n'a été enregistré dans le journal des erreurs pour cette requête). Consulter le journal d'erreurs pour voir quelle requête a généré quelle erreur. | ||||||||||
%m |
La méthode de la requête | ||||||||||
%{NOMVAR}n |
Le contenu de la note NOMVAR en provenance d'un autre module. | ||||||||||
%{NOMVAR}o |
Le contenu de la ligne d'en-tête
NOMVAR: de la réponse. | ||||||||||
%p |
Le port canonique du serveur servant la requête | ||||||||||
%{format}p |
Le port canonique du serveur servant la requête ou le
véritable port du serveur ou le véritable port du client. les
formats valides sont canonical , local ,
ou remote .
| ||||||||||
%P |
Le numéro de processus du processus enfant qui a servi la requête. | ||||||||||
%{format}P |
Le numéro de processus ou le numéro de thread du processus
enfant qui a servi la requête. Les formats valides sont
pid , tid , et hextid .
hextid nécessite APR version 1.2.0 ou supérieure.
| ||||||||||
%q |
La chaîne d'arguments (préfixée par un ? si une
chaîne d'arguments existe, sinon une chaîne vide) | ||||||||||
%r |
La première ligne de la requête | ||||||||||
%R |
Le gestionnaire qui génère la réponse (s'il y en a un). | ||||||||||
%s |
Statut. Pour les requêtes redirigées en interne, il s'agit
du statut de la requête *originale* --- %>s pour
la dernière. | ||||||||||
%t |
Date à laquelle la requête a été reçue (au format anglais standard) | ||||||||||
%{format}t |
La date, sous la forme spécifiée par format, qui devrait
être au format étendu strftime(3) (éventuellement
localisé). Si le format commence par begin: (valeur
par défaut), la date est extraite au début du traitement de la
requête ; s'il commence par end: , la date
correspond au moment où l'entrée du journal est inscrite, par
conséquent vers la fin du traitement de la requête. Hormis les
formats supportés par strftime(3) , les formats
suivants sont aussi disponibles :
strftime(3) dans la même chaîne de
format. Par contre, vous pouvez utiliser plusieurs symboles
%{format}t . | ||||||||||
%T |
Le temps mis pour servir la requête, en secondes. Le temps commence à être mesuré au moment où la première ligne de la requête HTTP est transmise par le système d'exploitation au serveur HTTP, et se termine au moment où le dernier octet de la réponse est envoyé au système d'exploitation par le serveur HTTP. Le temps mesuré n'inclut donc aucune des rubriques suivantes :
| ||||||||||
%{UNIT}T |
Le temps mis pour traiter la requête dans une unité définie
par UNIT . Les valeurs d'unité valides sont
ms pour millisecondes, us pour
microsecondes et s pour secondes. Si
UNIT est omis, la valeur de l'unité par défaut est
la seconde ; spécifier la valeur d'unité us revient
à utiliser le format %D . La possibilité de
spécifier une valeur d'unité avec le format %T est
disponible depuis la version 2.4.13 du serveur HTTP Apache. | ||||||||||
%u |
L'utilisateur distant (en provenance d'auth ; peut être faux
si le statut de retour (%s ) est 401). | ||||||||||
%U |
Le chemin de la requête, à l'exclusion de toute chaîne d'arguments. | ||||||||||
%v |
Le nom canonique du serveur qui a servi la requête, défini
par la directive | ||||||||||
%V |
La nom du serveur en tenant compte de la définition de la
directive | ||||||||||
%X |
Statut de la connexion lorsque la réponse a été renvoyée
:
| ||||||||||
%I |
Le nombre d'octets reçus, en comptant la requête et les
en-têtes, ne peut être nul. Nécessite l'activation de
| ||||||||||
%O |
Nombre d'octets envoyés, y compris les en-têtes. Peut être
nul dans les rares cas où une requête est avortée avant que la
réponse ne soit envoyée. Nécessite l'activation de
| ||||||||||
%S |
Nombre d'octets transmis en émission et réception y compris
la requête et les en-têtes ; cette valeur ne peut pas être
nulle, il s'agit de la combinaison de %I et %O. Vous devez
activer | ||||||||||
%{VARNAME}^ti |
Le contenu de la variable VARNAME:
spécifiée dans la requête envoyée au serveur. | ||||||||||
%{VARNAME}^to |
Le contenu de la variable VARNAME:
spécifiée dans la réponse envoyée par le serveur. |
Il est possible de restreindre l'enregistrement de certains
éléments
en fonction du code de statut de la réponse, en insérant une liste
de codes de statut séparés par des virgules immédiatement après le
caractère "%". Par exemple, "%400,501{User-agent}i"
n'enregistrera l'en-tête User-agent
que dans le cas
d'une erreur 400 ou 501. Avec les autres codes de statut, c'est la
chaîne littérale "-"
qui sera enregistrée. La liste
de codes peut être précédée d'un "!
" pour inverser la
condition : "%!200,304,302{Referer}i"
enregistre
l'en-tête Referer
pour toutes les requêtes qui
ne renvoient pas un des trois codes spécifiés.
Les modificateurs "<" et ">" peuvent être utilisés pour
les requêtes qui ont été redirigées en interne afin de choisir si
c'est respectivement la requête originale ou finale qui doit être
consultée. Par défaut, les directives %s, %U, %T, %D,
et %r
consultent la requête originale, alors que
toutes les autres consultent la requête finale. Ainsi, par
exemple, on peut utiliser %>s
pour enregistrer le
statut final de la requête, et %<u
pour
enregistrer l'utilisateur authentifié à l'origine pour une requête
redirigée en interne vers une ressource sans authentification.
Pour des raisons de sécurité, à partir de la version 2.0.46,
les caractères non imprimables et autres caractères spéciaux dans
les directives %r
, %i
et %o
doivent être échappés à l'aide des séquences
\xhh
,
où hh est le code hexadécimal du caractère spécial.
Comme exceptions à cette règle, les caractères "
et
\
doivent être échappés par un anti-slash, et tous
les "blancs" doivent être écrits selon leur notation de style C
(\n
, \t
, etc...). Avant la version
2.0.46, aucun échappement n'était effectué sur ces chaînes, et il
fallait être très prudent lors de l'exploitation des journaux
bruts.
A la différence de la version 1.3, depuis httpd 2.0, les chaînes
de format %b
et %B
ne représentent pas
le nombre d'octets envoyés au client, mais simplement la taille en
octets de la réponse HTTP (les deux étant différents, par exemple,
si la connexion est abandonnée, ou si SSL est utilisé). Le format
%O
fourni par
Note : %R
ne renverra pas
d'information à propos du gestionnaire lorsqu'une mise en cache de
contenu entre en jeu.
Note : la présence du caractère '^' au début d'une chaîne de format de trois caractères n'a aucune incidence sur la signification de cette chaîne, mais il doit être le premier caractère de toute chaîne de format de trois caractères nouvellement créée, afin d'éviter d'éventuels conflits avec des chaînes de format qui utilisent des caractères littéraux adjacents à un spécificateur de format tel que "%Dus".
Quelques chaînes de format couramment utilisées :
"%h %l %u %t \"%r\" %>s %b"
"%v %h %l %u %t \"%r\" %>s %b"
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-agent}i\""
"%{Referer}i -> %U"
"%{User-agent}i"
Vous pouvez utiliser plusieurs fois la directive
%{format}t
pour construire un format de temps
utilisant les symboles de format étendus tels que
msec_frac
:
"%{%d/%b/%Y %T}t.%{msec_frac}t %{%z}t"
Voir le document conseils à matière de sécurité pour plus de détails sur les raisons pour lesquelles votre sécurité pourrait être compromise, si le répertoire où sont stockés les fichiers journaux sont inscriptibles par tout autre utilisateur que celui qui démarre le serveur.
Lorsque la directive
La directive mod_cookies
,
et est obsolète.
La directive
Le premier argument, qui spécifie l'emplacement où les journaux seront écrits, accepte deux types de valeurs :
|
", suivi du chemin vers un
programme qui recevra les informations de la journalisation sur
son entrée standard. Voir les notes à propos de la journalisation redirigée pour plus
d'informations.
Si les journaux sont redirigés vers un programme, ce dernier
s'exécutera sous l'utilisateur qui a démarré
Lors de la spécification d'un chemin de fichier sur les plate-formes non-Unix, il faut prendre soin de ne pas oublier que seuls les slashes directs doivent être utilisés, même si la plate-forme autorise l'emploi d'anti-slashes. D'une manière générale, c'est une bonne idée que de n'utiliser que des slashes directs dans les fichiers de configuration.
Le second argument permet de définir ce qui va être écrit dans le
fichier journal. Il peut contenir soit un alias prédéfini
par une directive
Par exemple, les deux blocs de directives suivants produisent le même effet :
Le troisième argument est optionnel et permet de contrôler si une
requête doit être ou non journalisée. Dans le cas d'une clause
'env=!nom
', la condition peut être la
présence ou l'absence d'une variable particulière dans
l'environnement du serveur. Dans le cas
d'une clause 'expr=expression', la condition consiste
en une expression booléenne
quelconque. Si la condition n'est pas vérifiée, la requête ne sera
pas journalisée. D'éventuelles références à des en-têtes HTTP dans
l'expression rationnelle n'entraîneront pas l'ajout des noms
d'en-tête correspondants à l'en-tête Vary.
Les variables d'environnement peuvent être définies au niveau de
chaque requête en utilisant les modules
Ou, pour reproduire le comportement de l'ancienne directive RefererIgnore, vous pouvez utiliser :
Cette directive permet de spécifier le format du fichier journal des accès.
La directive
Sous sa seconde forme, la directive
%
).
Cette directive possède exactement les mêmes arguments et produit
les mêmes effets que la directive
La directive
Elle est identique à la directive