<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
-<!-- English Revision: 1933507 -->
+<!-- English Revision: 1935554 -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
suivante consiste à analyser ces informations de façon à pouvoir en
extraire des statistiques utiles. L'analyse de journaux en général est en
dehors du sujet de ce document et ne fait pas vraiment partie intégrante
- du travail du serveur web lui-même.</p>
+ du travail du serveur web lui-même.
+ </p>
<p>Différentes versions du démon Apache httpd utilisaient d'autres modules
et directives pour contrôler la journalisation des accès, à l'instar de
<highlight language="config">
LogFormat "%h %l %u %t \"%r\" %>s %b" common
-CustomLog logs/access_log common
+CustomLog "logs/access_log" common
</highlight>
<p>Ici est définie l'<em>identité</em> <code>common</code> qui est
<dt><code>200</code> (<code>%>s</code>)</dt>
- <dd>C'est le code de statut que le serveur retourne au client. Cette
+ <dd>C'est le code de statut que le serveur retourne au client. Cette
information est très importante car elle indique si la requête a fait
- l'objet d'une réponse positive (codes commençant par 2), une redirection
- (codes commençant par 3), une erreur due au client (codes commençant par
- 4), ou une erreur due au serveur (codes commençant par 5). Vous
- trouverez la liste complète des codes de statut possibles dans la
- spécification HTTP (<rfc>2616</rfc>) (RFC2616 section 10).</dd>
+ l'objet d'une réponse positive (codes commençant par 2), une
+ redirection (codes commençant par 3), une erreur due au client (codes
+ commençant par 4), ou une erreur due au serveur (codes commençant
+ par 5). Vous trouverez la liste complète des codes de statut possibles
+ dans la spécification
+ HTTP (<rfc>2616</rfc>) (RFC2616 section 10).</dd>
<dt><code>2326</code> (<code>%b</code>)</dt>
<highlight language="config">
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
-CustomLog log/access_log combined
+CustomLog "log/access_log" combined
</highlight>
<p>Ce format est identique au Common Log Format, avec deux champs
<highlight language="config">
LogFormat "%h %l %u %t \"%r\" %>s %b" common
-CustomLog logs/access_log common
-CustomLog logs/referer_log "%{Referer}i -> %U"
-CustomLog logs/agent_log "%{User-agent}i"
+CustomLog "logs/access_log" common
+CustomLog "logs/referer_log" "%{Referer}i -> %U"
+CustomLog "logs/agent_log" "%{User-agent}i"
</highlight>
<p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
# Marque les requêtes pour le fichier robots.txt
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Journalise toutes les autres requêtes
-CustomLog logs/access_log common env=!dontlog
+CustomLog "logs/access_log" common env=!dontlog
</highlight>
<p>Autre exemple, imaginons l'enregistrement des requêtes en provenance
<highlight language="config">
SetEnvIf Accept-Language "en" english
- CustomLog logs/english_log common env=english
- CustomLog logs/non_english_log common env=!english
+ CustomLog "logs/english_log" common env=english
+ CustomLog "logs/non_english_log" common env=!english
</highlight>
<p>Dans le contexte d'une mise en cache, il peut être
<highlight language="config">
SetEnv CACHE_MISS 1
LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
-CustomLog logs/access_log common-cache
+CustomLog "logs/access_log" common-cache
</highlight>
<p><module>mod_cache</module> va s'exécuter avant
<section id="rotation">
<title>Rotation des journaux</title>
- <p>Même dans le cas d'un serveur modérément sollicité, la quantité
- d'informations stockées dans les fichiers journaux est très importante.
- Le fichier journal des accès grossit en général d'1 Mo ou plus toutes
- les 10000 requêtes. Il est par conséquent nécessaire d'effectuer
- périodiquement la rotation des journaux en déplaçant ou supprimant les
- fichiers correspondants. On ne peut pas le faire pendant que le serveur
- est en cours d'exécution, car Apache httpd va continuer à écrire dans l'ancien
- fichier journal aussi longtemps qu'il le maintiendra ouvert.
- C'est pourquoi le serveur doit être
- <a href="stopping.html">redémarré</a> après le déplacement ou la
- suppression des fichiers journaux de façon à ce qu'il en ouvre
- de nouveaux.</p>
-
- <p>Avec un redémarrage <em>graceful</em>, on peut faire en sorte que le
- serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
- existantes ou en cours avec les clients. Cependant, pour que ceci soit
- possible, le serveur doit continuer à écrire dans les anciens fichiers
- journaux pendant qu'il termine le traitement des requêtes en cours.
- Il est donc nécessaire d'attendre un certain temps après le rédémarrage
- avant d'effectuer tout traitement sur les fichiers journaux. Voici un
- scénario typique dans lequel on effectue une simple rotation des
- journaux en compressant les anciens fichiers correspondants afin
- de gagner de l'espace disque :</p>
-
- <example>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </example>
+ <p>Même sur un serveur modérément sollicité, les fichiers journaux
+ grossissent rapidement — le journal des accès croît à peu près de 1 Mo ou
+ plus toutes les 10000 requêtes. Sans rotation, les journaux consomment de
+ plus en plus d’espace disque et deviennent difficiles à analyser. Il est
+ donc recommandé de configurer une rotation automatique des journaux dès le
+ départ.</p>
+
+ <section id="rotation-rotatelogs">
+ <title>Utilisation de rotatelogs (recommandé)</title>
+
+ <p>L’approche la plus simple consiste à utiliser le programme
+ <program>rotatelogs</program> intégré à httpd en utilisant la <a
+ href="#piped">redirection des journaux</a>. Ce programme permet une
+ rotation des journaux sans avoir à redémarrer le serveur et sans outil
+ externe. Pour une rotation des journaux toutes les 24 heures :</p>
+
+<example>
+<highlight language="config">
+CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined
+ErrorLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/error_log 86400"
+</highlight>
+</example>
+
+ <p>Pour une rotation lorsque la taille du journal atteint une certaine
+ valeur (par exemple 100 Mo) :</p>
+
+<example>
+<highlight language="config">
+CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 100M" combined
+</highlight>
+</example>
+
+ <p>Vous pouvez aussi utiliser un motif de nom de fichier avec horodatage
+ sous forme d’une chaîne au format <code>strftime</code> :</p>
+
+<example>
+<highlight language="config">
+CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined
+</highlight>
+</example>
+
+ <p>Voir <program>rotatelogs</program> pour une description complète de ses
+ options, en particulier les temps de décalage, les limitations de nombre de
+ fichiers et la compression.</p>
+ </section>
- <p>La section suivante présente une autre méthode de rotation des journaux
- qui consiste à utiliser les
- <a href="#piped">journaux redirigés</a>.</p>
+ <section id="rotation-logrotate">
+ <title>Utilisation de logrotate ou de la gestion des journaux par le
+ système</title>
+
+ <p>La plupart des distributions de Linux fournissent le programme
+ <code>logrotate</code> qui effectue une rotation, une compression et une
+ expiration des fichiers journaux selon une planification. Si votre
+ distribution comporte déjà une configuration de logrotate pour httpd
+ (examinez <code>/etc/logrotate.d/</code>), elle gère peut-être déjà la
+ rotation pour vous.</p>
+
+ <p>Lorsqu’on utilise un outil de rotation externe comme
+ <code>logrotate</code>, il faut faire en sorte que httpd réouvre ses
+ fichiers journaux quand les anciens ont été mis de côté. Pour ce faire,
+ l’approche standard est un redémarrage <em>graceful</em> :</p>
+
+<example>
+<highlight language="sh">
+/usr/sbin/apachectl graceful
+</highlight>
+</example>
+
+ <p>Votre script <code>postrotate</code> dans la configuration de logrotate
+ doit contenir cette dernière commande (ou la commande équivalente
+ <code>systemctl reload</code>). Comme httpd continue d’écrire dans
+ l’ancien fichier jusqu’à ce qu’il reçoive le signal, tout post-traitement
+ des fichiers ayant subi une rotation doit prévoir un bref délai.</p>
+
+ </section>
</section>
<section id="piped">
<title>Journaux redirigés</title>
- <p>Nous avons vu que le démon httpd écrivait les informations de
- journalisation des erreurs et des accès dans un fichier journal ;
- il peut aussi
- rediriger ces informations vers un autre processus par l'intermédiaire d'un
- tube de communication (pipe). Cette fonctionnalité améliore
- considérablement la souplesse de la journalisation, sans ajouter de code
- au serveur principal. Pour rediriger les informations de journalisation
- vers un tube de communication, remplacez simplement le nom de fichier
- journal par
- le caractère pipe "<code>|</code>", suivi du nom de l'exécutable qui va
- recueillir les entrées de journal sur son entrée
- standard. Le serveur va
- lancer le processus de redirection des journaux au moment du démarrage du
- serveur, et le relancera s'il cesse de fonctionner
- pendant l'exécution du serveur.
- (Nous dénommons cette technique "journalisation
- redirigée fiable" grâce à cette dernière fonctionnalité.)</p>
-
- <p>Les processus de journalisation redirigée sont lancés par le processus
- httpd parent, et héritent de l'UID de ce dernier. Cela signifie que les
- programmes de journalisation dirigée s'exécutent généralement en tant que
- root. Il est donc très important que ces programmes soient simples et
- sécurisés.</p>
-
- <p>Un des grands avantages de la journalisation redirigée est la possibilité
- d'effectuer la rotation des journaux sans avoir à redémarrer le serveur. Pour
- accomplir cette tâche, le serveur HTTP Apache fournit un programme simple
- appelé <program>rotatelogs</program>. Par exemple, pour une rotation des
- journaux toutes les 24 heures, ajoutez ces lignes :</p>
-
- <highlight language="config">
- CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
- </highlight>
-
- <p>Notez que l'ensemble de la commande qui sera appelée par le tube de
- communication a été placée entre guillemets. Bien que cet exemple
- concerne le journal des accès, la même technique peut être utilisée
- pour le journal des erreurs.</p>
-
- <p>Comme la journalisation conditionnelle, la journalisation redirigée est
- un outil très puissant, mais si elle existe, il est préférable d'utiliser
- une solution plus simple comme le traitement à posteriori hors ligne.</p>
-
-
- <p>Par défaut, le processus de redirection du journal est lancé sans
- invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
- au lieu de "<code>|</code>" (en général avec <code>/bin/sh -c</code>)
- :</p>
-
- <highlight language="config">
-# Invocation de "rotatelogs" en utilisant un shell
-CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
- </highlight>
-
-
- <p>Il s'agissait du comportement par défaut sous Apache 2.2. Selon
- les spécificités du shell, ceci peut générer un processus shell
- supplémentaire pour toute la durée du programme de redirection du
- journal, et induire des problèmes de gestion de signaux au cours du
- redémarrage. La notation "<code>||</code>" est aussi supportée pour
- des raisons de compatibilité avec Apache 2.2 et est équivalente à
- "<code>|</code>".</p>
+ <p>httpd peut écrire dans les fichiers journaux des erreurs et des accès à
+ travers un tube (pipe) vers un autre processus, plutôt que d’écrire
+ directement dans un fichier. Pour mettre en œuvre cette redirection,
+ remplacez le nom du fichier par le caractère pipe "<code>|</code>", suivi de
+ la commande qui recevra les entrées du journal sur son entrée standard :</p>
+
+<example>
+<highlight language="config">
+CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined
+</highlight>
+</example>
+
+ <p>httpd démarre le processus de redirection des journaux au démarrage du
+ serveur et le redémarre automatiquement s’il se plante (ce comportement est
+ parfois nommé « journalisation redirigée fiable »). L’ensemble de la
+ commande à partir du caractère pipe doit être entourée de guillemets — cette
+ syntaxe fonctionne pour les deux directives <directive
+ module="mod_log_config">CustomLog</directive> et <directive
+ module="core">ErrorLog</directive>.</p>
+
+ <p>Les processus de redirection des journaux sont lancés par le processus
+ httpd parent et héritent de son identifiant utilisateur. Cela signifie en
+ général qu’ils s’exécutent en tant que root ; faites donc en sorte que les
+ programmes de redirection des journaux restent simples et sécurisés.</p>
+
+ <p>Par défaut, le processus de redirection des journaux est lancé
+ directement, sans passer par un shell. Vous pouvez utiliser
+ "<code>|$</code>" à la place de "<code>|</code>" pour effectuer ce lancement
+ via un shell (en général <code>/bin/sh -c</code>) :</p>
+
+<example>
+<highlight language="config">
+CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined
+</highlight>
+</example>
+
+ <p>La variante avec shell est parfois requise si votre commande redirigée
+ utilise des fonctionnalités du shell comme les caractères génériques ou le
+ développement de variable. Dans la plupart des cas, il est préférable
+ d’utiliser l’invocation directe (sans passer par un shell).</p>
<note><title>Note à propos de la plateforme Windows</title>
<p>Notez que sous Windows, la mémoire allouée au bureau (desktop
<highlight language="config">
LogFormat "%v %p %h %l %u %t \"%r\" %>s %b" commonvhost
-CustomLog logs/access_log commonvhost
+CustomLog "logs/access_log" commonvhost
</highlight>
<p>Le champ <code>%v</code> sert à enregistrer le nom de l'hôte virtuel qui
<modulelist>
<module>mod_logio</module>
<module>mod_log_config</module>
+ <module>mod_log_debug</module>
<module>mod_log_forensic</module>
<module>mod_cgi</module>
</modulelist>
<directivelist>
- <directive module="mod_log_config">LogFormat</directive>
<directive module="mod_log_config">BufferedLogs</directive>
<directive module="mod_log_forensic">ForensicLog</directive>
+ <directive module="mod_log_config">LogFormat</directive>
+ <directive module="mod_log_debug">LogMessage</directive>
<directive module="mpm_common">PidFile</directive>
<directive module="mod_cgi">ScriptLog</directive>
<directive module="mod_cgi">ScriptLogBuffer</directive>
serveur en production. Vous trouverez plus d'informations dans la
documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
</section>
+
+ <section id="debug">
+ <title>Journalisation de débogage configurable</title>
+
+ <p>La directive <directive module="mod_log_debug">LogMessage</directive>
+ vous permet de créer vos propres messages de journalisation
+ personnalisés pour faciliter vos opérations de débogage.
+ </p>
+ </section>
</section>
</manualpage>