1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Fichiers journaux - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
15 <p class="apache">Serveur Apache HTTP Version 2.3</p>
16 <img alt="" src="./images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
19 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Fichiers journaux</h1>
21 <p><span>Langues Disponibles: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> |
22 <a href="./fr/logs.html" title="Français"> fr </a> |
23 <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
24 <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
25 <a href="./tr/logs.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
27 <div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
28 anglaise pour les changements récents.</div>
30 <p>Pour véritablement gérer un serveur web,
31 il est nécessaire de disposer d'un
32 retour d'informations à propos de l'activité et des performances du
33 serveur, ainsi que de tout problème qui pourrait survenir. Le serveur HTTP
34 Apache propose des fonctionnalités de journalisation souples et très
35 complètes. Ce document décrit comment configurer ces fonctionnalités de
36 journalisation et interpréter le contenu des journaux.</p>
38 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble</a></li>
39 <li><img alt="" src="./images/down.gif" /> <a href="#security">Avertissement à propos de la sécurité</a></li>
40 <li><img alt="" src="./images/down.gif" /> <a href="#errorlog">Journal des erreurs</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#permodule">Journalisation par module</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#accesslog">Journal des accès</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#rotation">Rotation des journaux</a></li>
44 <li><img alt="" src="./images/down.gif" /> <a href="#piped">Journaux redirigés</a></li>
45 <li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Hôtes virtuels</a></li>
46 <li><img alt="" src="./images/down.gif" /> <a href="#other">Autres fichiers journaux</a></li>
48 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
50 <h2><a name="overview" id="overview">Vue d'ensemble</a></h2>
53 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td /></tr></table>
56 Le serveur HTTP Apache fournit toute une variété de mécanismes
57 différents pour la journalisation de tout ce qui peut se passer au
58 sein de votre serveur, depuis la requête initiale, en passant par le
59 processus de mise en correspondance des URLs, et jusqu'à la fermeture
60 de la connexion, y compris toute erreur pouvant survenir au cours du
61 traitement. De plus, certains modules tiers fournissent des
62 fonctionnalités de journalisation ou insèrent des entrées dans les
63 fichiers journaux existants, et les applications comme les programmes
64 CGI, les scripts PHP ou autres gestionnaires peuvent envoyer des
65 messages vers le journal des erreurs du serveur.
69 Ce document décrit le fonctionnement des modules de journalisation
70 fournis en standard avec le serveur httpd.
73 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
75 <h2><a name="security" id="security">Avertissement à propos de la sécurité</a></h2>
78 <p>Tout utilisateur qui a les droits en écriture sur le répertoire dans
79 lequel Apache httpd écrit ses journaux pourra quasi
80 certainement avoir accès à l'uid sous lequel le serveur est démarré, en
81 l'occurrence habituellement root. N'accordez <em>PAS</em> aux utilisateurs
82 l'accès en écriture au répertoire dans lequel les journaux sont stockés
83 sans savoir exactement quelles en seraient les conséquences ; voir le
84 document <a href="misc/security_tips.html">conseils sur la sécurité</a>
85 pour plus de détails.</p>
87 <p>En outre, les journaux peuvent contenir des informations fournies
88 directement par un client, sans caractères d'échappement. Des clients mal
89 intentionnés peuvent donc insérer des caractères de contrôle dans les
90 journaux, et il convient par conséquent d'être très prudent lors de la
91 manipulation des journaux bruts.</p>
92 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
94 <h2><a name="errorlog" id="errorlog">Journal des erreurs</a></h2>
97 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table>
99 <p>Le journal des erreurs du serveur, dont le nom et la localisation sont
100 définis par la directive <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>,
101 est le journal le plus important. C'est dans celui-ci
102 que le démon Apache httpd va envoyer les informations de diagnostic et
103 enregistrer toutes les erreurs qui surviennent lors du traitement des
104 requêtes. Lorsqu'un problème survient au démarrage du serveur ou pendant
105 son fonctionnement, la première chose à faire est de regarder dans ce
106 journal, car il vous renseignera souvent sur le problème rencontré et
107 la manière d'y remédier.</p>
109 <p>Le journal des erreurs est habituellement enregistré dans un fichier
110 (en général <code>error_log</code> sur les systèmes de type Unix et
111 <code>error.log</code> sur Windows et OS/2). Sur les systèmes de type Unix,
112 le serveur peut aussi enregistrer ses erreurs dans
113 <code>syslog</code> ou les
114 <a href="#piped">rediriger vers un programme</a> par l'intermédiaire d'un
115 tube de communication (pipe).</p>
117 <p>Le format du journal des erreurs est descriptif et de forme
118 relativement libre. Certaines informations apparaissent cependant dans la
119 plupart des entrées du journal. Voici un message typique
120 à titre d'exemple : </p>
122 <div class="example"><p><code>
123 [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
124 client denied by server configuration:
125 /export/home/live/ap/htdocs/test
128 <p>Le premier champ de l'entrée du journal est la date et l'heure du
129 message. Le second champ indique la sévérité de l'erreur rapportée. La
130 directive <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> permet de
131 restreindre le type des erreurs qui doivent être enregistrées
132 dans le journal des erreurs en définissant leur niveau de sévérité. Le
133 troisième champ contient l'adresse IP du client qui a généré l'erreur.
134 Vient ensuite le message proprement dit, qui indique dans ce cas que le
135 serveur a été configuré pour interdire l'accès au client. Le serveur
136 indique le chemin système du document requis (et non
139 <p>Une grande variété de messages différents peuvent apparaître dans le
140 journal des erreurs. La plupart d'entre eux sont similaires à l'exemple
141 ci-dessus. Le journal des erreurs peut aussi contenir des informations de
142 débogage en provenance de scripts CGI. Toute information qu'un script CGI
143 écrit sur la sortie d'erreurs standard <code>stderr</code> sera recopiée
144 telle quelle dans le journal des erreurs.</p>
146 <p>Il n'est pas possible de personnaliser le journal des erreurs en ajoutant ou en
147 supprimant des informations. Cependant, les entrées du journal des erreurs
148 qui concernent certaines requêtes possèdent des entrées correspondantes
149 dans le <a href="#accesslog">journal des accès</a>. Ainsi, l'entrée de
150 l'exemple ci-dessus correspond à une entrée du journal des accès avec un
151 code de statut 403. Etant donné qu'il est possible de personnaliser le
152 journal des accès, vous pouvez obtenir d'avantage d'informations sur les
153 circonstances d'une erreur en consultant ce journal.</p>
155 <p>Pendant la phase de test, il est souvent utile de visualiser en continu
156 le journal des erreurs afin de détecter tout problème éventuel. Sur les
157 systèmes de type Unix, ceci s'effectue à l'aide de la commande :</p>
159 <div class="example"><p><code>
162 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
163 <div class="section">
164 <h2><a name="permodule" id="permodule">Journalisation par module</a></h2>
167 <p>La directive <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> permet
168 de spécifier un niveau de sévérité de journalisation pour chaque
169 module. Vous pouvez ainsi résoudre un problème propre à un module particulier
170 en augmentant son volume de journalisation sans augmenter ce volume
171 pour les autres modules. Ceci est particulièrement utile lorsque
172 vous voulez obtenir des détails sur le fonctionnement de modules
173 comme <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> ou <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
175 <p>Pour ce faire, vous devez spécifier le nom du module dans votre
176 directive <code class="directive">LogLevel</code> :</p>
178 <div class="example"><p><code>
179 LogLevel info rewrite:trace5
182 <p>Dans cet exemple, le niveau de journalisation général est défini
183 à info, et à <code>trace5</code> pour <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
185 <div class="note">Cette directive remplace les directives de journalisation par
186 module des versions précédentes du serveur, comme
187 <code>RewriteLog</code>.</div>
188 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
189 <div class="section">
190 <h2><a name="accesslog" id="accesslog">Journal des accès</a></h2>
193 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table>
195 <p>Le journal des accès au serveur
196 enregistre toutes les requêtes que traite
197 ce dernier. La localisation et le contenu du journal des accès sont définis
198 par la directive <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>.
199 La directive <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
200 permet de simplifier la sélection du contenu du journal. Cette section
201 décrit comment configurer le serveur pour l'enregistrement des informations
202 dans le journal des accès.</p>
204 <p>Bien évidemment, le stockage d'informations dans le journal des accès
205 n'est que le point de départ de la gestion de la journalisation. L'étape
206 suivante consiste à analyser ces informations de façon à pouvoir en
207 extraire des statistiques utiles. L'analyse de journaux en général est en
208 dehors du sujet de ce document et ne fait pas vraiment partie intégrante
209 du travail du serveur web lui-même. Pour plus d'informations à propos de ce
210 sujet et des applications dédiées à l'analyse de journaux, vous pouvez vous
211 référer à <a href="http://dmoz.org/Computers/Software/Internet/ Site_Management/Log_analysis/">Open Directory</a> ou
212 <a href="http://dir.yahoo.com/Computers_and_Internet/Software/ Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>.</p>
214 <p>Différentes versions du démon Apache httpd utilisaient d'autres modules
215 et directives pour contrôler la journalisation des accès, à l'instar de
216 mod_log_referer, mod_log_agent, et de la directive
217 <code>TransferLog</code>. La directive
218 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> rassemble
219 désormais les fonctionnalités de toutes les anciennes directives.</p>
221 <p>Le format du journal des accès est hautement configurable. Il est
222 défini à l'aide d'une chaîne de format qui ressemble sensiblement à la
223 chaîne de format de style langage C de printf(1). Vous trouverez quelques
224 exemples dans les sections suivantes. Pour une liste exhaustive de ce que
225 peut contenir une chaîne de format, vous pouvez vous référer au chapitre
226 <a href="mod/mod_log_config.html#formats">chaînes de format</a> de la
227 documentation du module <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.</p>
229 <h3><a name="common" id="common">Format habituel du journal</a></h3>
232 <p>Voici une configuration typique pour le journal des accès :</p>
234 <div class="example"><p><code>
235 LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
236 CustomLog logs/access_log common
239 <p>Ici est définie l'<em>identité</em> <code>common</code> qui est
240 ensuite associée à une chaîne de format de journalisation particulière.
241 La chaîne de format est constituée de directives débutant par le
242 caractère %, chacune d'entre elles indiquant au serveur d'enregistrer
243 un élément particulier d'information. Des caractères littéraux peuvent
244 aussi être insérés dans la chaîne de format ; il seront copiés tels
245 quels dans le flux de sortie destiné à la journalisation.
246 Les guillemets (<code>"</code>) doivent être échappées en les faisant
247 précéder d'un anti-slash (<code>\</code>) afin qu'elles ne soient pas
248 interprétées comme la fin de la chaîne de format. La chaîne de format
249 peut aussi contenir les caractères de contrôle spéciaux
250 "<code>\n</code>" et "<code>\t</code>" pour insérer respectivement
251 un passage à la ligne et une tabulation.</p>
253 <p>La directive <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
254 définit un nouveau fichier journal en l'associant à l'identité
255 précédemment définie. Le chemin du nom de fichier associé au journal
256 des accès est relatif au chemin défini par la directive
257 <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>, sauf s'il
258 débute par un slash.</p>
260 <p>La configuration ci-dessus va enregistrer les entrées de
261 journalisation selon un format connu sous le nom de
262 Common Log Format (CLF) pour "Format de journalisation standard".
263 Ce format standard peut être produit par de nombreux serveurs web
264 différents et lu par de nombreux programmes d'analyse de journaux.
265 Les entrées de fichier journal générées selon le format CLF
266 ressemblent à ceci :</p>
268 <div class="example"><p><code>
269 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
270 /apache_pb.gif HTTP/1.0" 200 2326
273 <p>Chaque partie de cette entrée de journal est décrite
274 dans ce qui suit.</p>
277 <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
279 <dd>Il s'agit de l'adresse IP du client (l'hôte distant) qui a envoyé
280 la requête au serveur. Si la directive
281 <code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code> est positionnée à
282 <code>On</code>, le serveur va essayer de déterminer le nom de l'hôte
283 et de l'enregistrer à la place de l'adresse IP. Cette configuration
284 n'est cependant pas recommandée car elle peut ralentir le serveur de
285 manière significative. Il est par conséquent préférable d'utiliser un
286 processeur d'analyse de journaux a posteriori
287 tel que <code class="program"><a href="./programs/logresolve.html">logresolve</a></code>
288 pour déterminer les noms d'hôte. L'adresse IP indiquée ici n'est pas
289 nécessairement l'adresse IP de la machine devant laquelle se trouve
290 l'utilisateur. Si un serveur mandataire s'intercale entre le serveur
291 et l'utilisateur, l'adresse indiquée sera celle du mandataire et non
292 celle de la machine à l'origine de la requête.</dd>
294 <dt><code>-</code> (<code>%l</code>)</dt>
296 <dd>Le "trait d'union" indique que la portion d'information
297 correspondante n'est pas disponible. Dans le cas présent, l'information
298 non disponible est l'identité (RFC 1413) du client telle que déterminée
299 par <code>identd</code> sur la machine cliente. Cette information est
300 très peu fiable et ne devrait jamais être utilisée, sauf dans le cas
301 de réseaux internes étroitement contrôlés. Le démon httpd ne cherchera
302 d'ailleurs à obtenir cette information que si la directive
303 <code class="directive"><a href="./mod/core.html#identitycheck">IdentityCheck</a></code> est positionnée
304 à <code>On</code>.</dd>
306 <dt><code>frank</code> (<code>%u</code>)</dt>
308 <dd>Il s'agit de l'identifiant utilisateur de la personne qui a
309 demandé le document, issu d'une authentification HTTP.
310 Ce même identifiant est en général fourni aux scripts CGI par
311 l'intermédiaire de la valeur de la variable d'environnement
312 <code>REMOTE_USER</code>. Si le statut de la requête (voir plus loin)
313 est 401, cette identifiant n'est pas fiable car l'utilisateur n'est
314 pas encore authentifié. Si le document n'est pas protégé par
315 mot de passe, cette partie d'information sera représentée par
316 "<code>-</code>", comme la partie précédente.</dd>
318 <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
319 (<code>%t</code>)</dt>
322 L'heure à laquelle la requête a été reçue.
323 Le format est le suivant :
326 <code>[jour/mois/année:heure:minutes:secondes zone]<br />
327 jour = 2*chiffre<br />
328 mois = 3*lettre<br />
329 année = 4*chiffre<br />
330 heure = 2*chiffre<br />
331 minutes = 2*chiffre<br />
332 secondes = 2*chiffre<br />
333 zone = (`+' | `-') 4*chiffre</code>
334 </p>Il est possible de modifier le format d'affichage de l'heure
335 en spécifiant <code>%{format}t</code> dans la chaîne de format du
336 journal, où <code>format</code> est une chaîne de format
337 de la forme de celle de la fonction <code>strftime(3)</code>
338 de la bibliothèque C standard, ou choisie parmi les
339 formats spéciaux supportés. Pour plus de détails,
340 reportez-vous aux. <a href="mod/mod_log_config.html#formats">chaînes de format</a>
341 de <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.
344 <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
345 (<code>\"%r\"</code>)</dt>
347 <dd>La ligne de la requête du client est placée entre guillemets.
348 Elle contient de nombreuses informations utiles. Tout d'abord, la
349 méthode utilisée par le client est <code>GET</code>. Ensuite, le
350 client a demandé la ressource <code>/apache_pb.gif</code>, et enfin,
351 le client a utilisé le protocole <code>HTTP/1.0</code>. Il est aussi
352 possible d'enregistrer séparément une ou plusieurs parties de la
353 requête. Par exemple, la chaîne de format "<code>%m %U %q %H</code>"
354 va enregistrer la méthode, le chemin, la chaîne de la requête et le
355 protocole, ce qui donnera le même résultat que
356 "<code>%r</code>".</dd>
358 <dt><code>200</code> (<code>%>s</code>)</dt>
360 <dd>C'est le code de statut que le serveur retourne au client. Cette
361 information est très importante car elle indique si la requête a fait
362 l'objet d'une réponse positive (codes commençant par 2), une
363 redirection (codes commençant par 3), une erreur due au client (codes
364 commençant par 4), ou une erreur due au serveur (codes commençant
365 par 5). Vous trouverez la liste complète des codes de statut possibles
366 dans la <a href="http://www.w3.org/Protocols/rfc2616/ rfc2616.txt">specification HTTP</a> (RFC2616 section 10).</dd>
368 <dt><code>2326</code> (<code>%b</code>)</dt>
370 <dd>La dernière partie indique la taille de l'objet retourné au client,
371 en-têtes non compris. Si aucun contenu n'a été retourné au client, cette
372 partie contiendra "<code>-</code>". Pour indiquer l'absence de contenu
373 par "<code>0</code>", utilisez <code>%B</code> au lieu de
374 <code>%b</code>.</dd>
378 <h3><a name="combined" id="combined">Combined Log Format (Format de journalisation combiné)</a></h3>
381 <p>Une autre chaîne de format couramment utilisée est le
382 "Combined Log Format" (Format de journalisation combiné). Il s'utilise
385 <div class="example"><p><code>
386 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
387 \"%{User-agent}i\"" combined<br />
388 CustomLog log/access_log combined
391 <p>Ce format est identique au Common Log Format, avec deux champs
392 supplémentaires. Chacun de ces deux champs utilise la directive
393 commençant par le caractère "%" <code>%{<em>header</em>}i</code>,
394 où <em>header</em> peut être n'importe quel en-tête de requête HTTP.
395 Avec ce format, le journal des accès se présentera comme suit :</p>
397 <div class="example"><p><code>
398 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
399 /apache_pb.gif HTTP/1.0" 200 2326
400 "http://www.example.com/start.html" "Mozilla/4.08 [en]
404 <p>Les champs supplémentaires sont :</p>
407 <dt><code>"http://www.example.com/start.html"</code>
408 (<code>\"%{Referer}i\"</code>)</dt>
410 <dd>L'en-tête "Referer" (sic) de la requête HTTP. Il indique le site
411 depuis lequel le client prétend avoir lancé sa requête. (Ce doit être
412 la page qui contient un lien vers <code>/apache_pb.gif</code> ou
413 inclut ce dernier fichier).</dd>
415 <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
416 (<code>\"%{User-agent}i\"</code>)</dt>
418 <dd>L'en-tête User-Agent de la requête HTTP. C'est une information
419 d'identification que le navigateur du client envoie à propos
424 <h3><a name="multiple" id="multiple">Journaux d'accès multiples</a></h3>
427 <p>Plusieurs journaux d'accès peuvent être créés en spécifiant tout
428 simplement plusieurs directives
429 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> dans le
430 fichier de configuration. Par exemple, les directives suivantes vont
431 créer trois journaux d'accès. Le premier contiendra les informations
432 de base CLF, le second les informations du Referer, et le troisième
433 les informations sur le navigateur. Les deux dernières directives
434 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> montrent
435 comment simuler les effets des directives <code>ReferLog</code> et
436 <code>AgentLog</code>.</p>
438 <div class="example"><p><code>
439 LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
440 CustomLog logs/access_log common<br />
441 CustomLog logs/referer_log "%{Referer}i -> %U"<br />
442 CustomLog logs/agent_log "%{User-agent}i"
445 <p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
446 une chaîne de format à un alias au moyen de la directive
447 <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>. Elle peut
448 être définie directement dans la ligne de la directive
449 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>.</p>
452 <h3><a name="conditional" id="conditional">Journalisation conditionnelle</a></h3>
455 <p>Il est parfois souhaitable d'exclure certaines entrées des journaux
456 d'accès en fonction des caractéristiques de la requête du client. On
457 peut aisément accomplir ceci à l'aide des
458 <a href="env.html">variables d'environnement</a>. Tout d'abord, une
459 variable d'environnement doit être définie pour indiquer que la
460 requête remplit certaines conditions. Pour ceci, on utilise en général
461 la directive <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>,
462 puis la clause <code>env=</code> de la directive
463 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> pour inclure
464 ou exclure les requêtes pour lesquelles
465 la variable d'environnement est définie.
466 Quelques exemples :</p>
468 <div class="example"><p><code>
469 # Marque les requêtes en provenance de l'interface loop-back<br />
470 SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
471 # Marque les requêtes pour le fichier robots.txt<br />
472 SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
473 # Journalise toutes les autres requêtes<br />
474 CustomLog logs/access_log common env=!dontlog
477 <p>Autre exemple, imaginons l'enregistrement des requêtes en provenance
478 d'utilisateurs de langue anglaise dans un journal, et celles des autres
479 utilisateurs dans un autre journal.</p>
481 <div class="example"><p><code>
482 SetEnvIf Accept-Language "en" english<br />
483 CustomLog logs/english_log common env=english<br />
484 CustomLog logs/non_english_log common env=!english
487 <p>Dans le contexte d'une mise en cache, il peut être
488 intéressant de connaître l'efficacité du cache. Pour y parvenir,
489 on pourrait utiliser cette méthode simple :</p>
491 <div class="example"><p><code>
492 SetEnv CACHE_MISS 1<br />
493 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br />
494 CustomLog logs/access_log common-cache
497 <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va s'exécuter avant
498 <code class="module"><a href="./mod/mod_env.html">mod_env</a></code>, et si son action est couronnée de
499 succès, il délivrera le contenu sans faire appel à ce dernier. Si
500 l'URL se trouve dans le cache, la valeur journalisée sera alors
501 <code>-</code>, tandis que dans le cas contraire elle sera
505 <p>Bien que nous venions de montrer que la journalisation conditionnelle
506 est souple et très puissante, cette méthode de contrôle du contenu des
507 journaux n'est pas la seule. Les fichiers journaux sont plus utiles
508 quand ils contiennent un enregistrement complet de l'activité du serveur,
509 et il est souvent plus aisé de simplement traiter à posteriori les fichiers
510 journaux pour supprimer les requêtes que vous ne voulez pas y voir
513 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
514 <div class="section">
515 <h2><a name="rotation" id="rotation">Rotation des journaux</a></h2>
518 <p>Même dans le cas d'un serveur modérément sollicité, la quantité
519 d'informations stockées dans les fichiers journaux est très importante.
520 Le fichier journal des accès grossit en général d'1 Mo ou plus toutes
521 les 10000 requêtes. Il est par conséquent nécessaire d'effectuer
522 périodiquement la rotation des journaux en déplaçant ou supprimant les
523 fichiers correspondants. On ne peut pas le faire pendant que le serveur
524 est en cours d'exécution, car Apache httpd va continuer à écrire dans l'ancien
525 fichier journal aussi longtemps qu'il le maintiendra ouvert.
526 C'est pourquoi le serveur doit être
527 <a href="stopping.html">redémarré</a> après le déplacement ou la
528 suppression des fichiers journaux de façon à ce qu'il en ouvre
531 <p>Avec un redémarrage <em>graceful</em>, on peut faire en sorte que le
532 serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
533 existantes ou en cours avec les clients. Cependant, pour que ceci soit
534 possible, le serveur doit continuer à écrire dans les anciens fichiers
535 journaux pendant qu'il termine le traitement des requêtes en cours.
536 Il est donc nécessaire d'attendre un certain temps après le rédémarrage
537 avant d'effectuer tout traitement sur les fichiers journaux. Voici un
538 scénario typique dans lequel on effectue une simple rotation des
539 journaux en compressant les anciens fichiers correspondants afin
540 de gagner de l'espace disque :</p>
542 <div class="example"><p><code>
543 mv access_log access_log.old<br />
544 mv error_log error_log.old<br />
545 apachectl graceful<br />
547 gzip access_log.old error_log.old
550 <p>La section suivante présente une autre méthode de rotation des journaux
551 qui consiste à utiliser les
552 <a href="#piped">journaux redirigés</a>.</p>
553 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
554 <div class="section">
555 <h2><a name="piped" id="piped">Journaux redirigés</a></h2>
558 <p>Nous avons vu que le démon httpd écrivait les informations de
559 journalisation des erreurs et des accès dans un fichier journal ;
561 rediriger ces informations vers un autre processus par l'intermédiaire d'un
562 tube de communication (pipe). Cette fonctionnalité améliore
563 considérablement la souplesse de la journalisation, sans ajouter de code
564 au serveur principal. Pour rediriger les informations de journalisation
565 vers un tube de communication, remplacez simplement le nom de fichier
567 le caractère pipe "<code>|</code>", suivi du nom de l'exécutable qui va
568 recueillir les entrées de journal sur son entrée
569 standard. Le serveur va
570 lancer le processus de redirection des journaux au moment du démarrage du
571 serveur, et le relancera s'il cesse de fonctionner
572 pendant l'exécution du serveur.
573 (Nous dénommons cette technique "journalisation
574 redirigée fiable" grâce à cette dernière fonctionnalité.)</p>
576 <p>Les processus de journalisation redirigée sont lancés par le processus
577 httpd parent, et héritent de l'UID de ce dernier. Cela signifie que les
578 programmes de journalisation dirigée s'exécutent généralement en tant que
579 root. Il est donc très important que ces programmes soient simples et
582 <p>Un des grands avantages de la journalisation redirigée est la possibilité
583 d'effectuer la rotation des journaux sans avoir à redémarrer le serveur. Pour
584 accomplir cette tâche, le serveur HTTP Apache fournit un programme simple
585 appelé <code class="program"><a href="./programs/rotatelogs.html">rotatelogs</a></code>. Par exemple, pour une rotation des
586 journaux toutes les 24 heures, ajoutez ces lignes :</p>
588 <div class="example"><p><code>
589 CustomLog "|/usr/local/apache/bin/rotatelogs
590 /var/log/access_log 86400" common
593 <p>Notez que l'ensemble de la commande qui sera appelée par le tube de
594 communication a été placée entre guillemets. Bien que cet exemple
595 concerne le journal des accès, la même technique peut être utilisée
596 pour le journal des erreurs.</p>
598 <p>Il existe un autre programme de rotation des journaux similaire mais
599 beaucoup plus souple : il s'agit de "cronolog", non fourni par Apache,
600 mais disponible <a href="http://www.cronolog.org/">ici</a>.</p>
602 <p>Comme la journalisation conditionnelle, la journalisation redirigée est
603 un outil très puissant, mais si elle existe, il est préférable d'utiliser
604 une solution plus simple comme le traitement à posteriori hors ligne.</p>
607 <p>Par défaut, le processus de redirection du journal est lancé sans
608 invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
609 au lieu de "<code>|</code>" (en général avec <code>/bin/sh -c</code>)
612 <div class="example"><p><code>
613 # Invocation de "rotatelogs" en utilisant un shell<br />
614 CustomLog "|$/usr/local/apache/bin/rotatelogs
615 /var/log/access_log 86400" common
618 <p>Il s'agissait du comportement par défaut sous Apache 2.2. Selon
619 les spécificités du shell, ceci peut générer un processus shell
620 supplémentaire pour toute la durée du programme de redirection du
621 journal, et induire des problèmes de gestion de signaux au cours du
622 redémarrage. La notation "<code>||</code>" est aussi supportée pour
623 des raisons de compatibilité avec Apache 2.2 et est équivalente à
624 "<code>|</code>".</p>
625 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
626 <div class="section">
627 <h2><a name="virtualhost" id="virtualhost">Hôtes virtuels</a></h2>
630 <p>Lorsqu'un serveur possède plusieurs <a href="vhosts/">hôtes virtuels</a>, il existe de nombreuses solutions pour gérer
631 les fichiers journaux. Par exemple, on peut utiliser les journaux comme
632 s'il s'agissait d'un serveur avec un seul hôte. Il suffit pour cela de
633 placer les directives de journalisation en dehors des sections
634 <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code> au niveau
635 du serveur principal, ce qui a pour effet de journaliser toutes les
636 requêtes dans le même journal des accès et des erreurs. Cette technique
637 est cependant inappropriée pour recueillir des statistiques sur chaque
638 hôte virtuel individuellement.</p>
640 <p>Si des directives <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ou
641 <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> sont placées dans une section
642 <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code>, toutes les
643 requêtes ou erreurs pour cet hôte virtuel ne seront enregistrées que dans
644 le fichier spécifié. Tout hôte virtuel qui ne possède pas de directives de
645 journalisation verra ses requêtes enregistrées dans le journal du serveur
646 principal. Cette technique est appropriée pour un petit nombre d'hôtes
647 virtuels, mais si ce nombre est important, elle peut devenir compliquée à
648 gérer. En outre, des problèmes de <a href="vhosts/fd-limits.html">nombre de descripteurs
649 de fichiers insuffisant</a> peuvent rapidement apparaître.</p>
651 <p>Il existe un très bon compromis pour le journal des accès. En intégrant
652 les informations à propos de l'hôte virtuel à la chaîne de format du
653 journal, il est possible de journaliser tous les hôtes dans le même
654 journal, puis de séparer ultérieurement le journal en plusieurs journaux
655 individuels. Considérons par exemple les directives suivantes :</p>
657 <div class="example"><p><code>
658 LogFormat "%v %l %u %t \"%r\" %>s %b"
660 CustomLog logs/access_log comonvhost
663 <p>Le champ <code>%v</code> sert à enregistrer le nom de l'hôte virtuel qui
664 traite la requête. Un programme tel que <a href="programs/other.html">split-logfile</a> peut ensuite être utilisé
665 pour générer "à froid" autant de journaux que d'hôtes virtuels.</p>
666 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
667 <div class="section">
668 <h2><a name="other" id="other">Autres fichiers journaux</a></h2>
671 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_log_forensic.html#forensiclog">ForensicLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
673 <h3>Enregistrement du nombre réel d'octets envoyés et reçus</h3>
676 <p>Le module <code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code> fournit deux champs
677 <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> supplémentaires
678 (%I et %O) qui permettent d'enregistrer le nombre réel d'octets reçus et
679 envoyés sur le réseau.</p>
682 <h3>Journalisation de style investigation judiciaire (forensic logging)</h3>
685 <p>Le module <code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code> permet la journalisation
686 à des fins d'investigation judiciaire des requêtes des clients. La
687 journalisation est effectuée avant et après le traitement de la requête,
688 qui fait donc l'objet de deux entrées dans le journal. Le générateur de
689 journaux d'investigation est très strict et ne permet aucune
690 personnalisation. C'est un inestimable outil de débogage et de sécurité.</p>
693 <h3><a name="pidfile" id="pidfile">Fichier PID</a></h3>
696 <p>Au démarrage, le démon httpd Apache enregistre l'identifiant du
697 processus httpd parent dans le fichier <code>logs/httpd.pid</code>.
698 Le nom de ce fichier peut être modifié à l'aide de la directive
699 <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. Cet identifiant
700 permet à l'administrateur de redémarrer et arrêter le démon en
701 envoyant des signaux au processus parent ; sous Windows, vous devez
702 utiliser l'option de ligne de commande -k. Pour plus de détails,
703 consulter la page <a href="stopping.html">Arrêt et redémarrage</a>.</p>
706 <h3><a name="scriptlog" id="scriptlog">Journal des scripts</a></h3>
709 <p>Afin de faciliter le débogage, la directive
710 <code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> vous permet
711 d'enregistrer les entrées et sorties des scripts CGI. Elle ne doit être
712 utilisée que pendant la phase de test, et en aucun cas sur un
713 serveur en production. Vous trouverez plus d'informations dans la
714 documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
717 <h3><a name="rewritelog" id="rewritelog">Journal de réécriture</a></h3>
720 <p>Lorsqu'on utilise les fonctionnalités puissantes et complexes du
721 module <a href="mod/mod_rewrite.html">mod_rewrite</a>, il est presque
722 toujours nécessaire d'utiliser la directive
723 <code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code> afin de
724 faciliter le débogage. Ce fichier journal fournit une analyse détaillée
725 de la transformation des requêtes par le moteur de réécriture. Le niveau
726 de détail est contrôlé par la directive
727 <code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code>.</p>
730 <div class="bottomlang">
731 <p><span>Langues Disponibles: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> |
732 <a href="./fr/logs.html" title="Français"> fr </a> |
733 <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
734 <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
735 <a href="./tr/logs.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
736 </div><div id="footer">
737 <p class="apache">Copyright 2010 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
738 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>