]> granicus.if.org Git - apache/blob - docs/manual/logs.xml.fr
34d8105642824314778a2e60bcd7b3754bae7bdf
[apache] / docs / manual / logs.xml.fr
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- French translation : Lucien GENTIS -->
5 <!-- Reviewed by : Vincent Deffontaines -->
6 <!-- English Revision: 1001245 -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <manualpage metafile="logs.xml.meta">
26
27   <title>Fichiers journaux</title>
28
29   <summary>
30     <p>Pour v&eacute;ritablement g&eacute;rer un serveur web,
31     il est n&eacute;cessaire de disposer d'un
32     retour d'informations &agrave; propos de l'activit&eacute; et des performances du
33     serveur, ainsi que de tout probl&egrave;me qui pourrait survenir. Le serveur HTTP
34     Apache propose des fonctionnalit&eacute;s de journalisation souples et tr&egrave;s
35     compl&egrave;tes. Ce document d&eacute;crit comment configurer ces fonctionnalit&eacute;s de
36     journalisation et interpr&eacute;ter le contenu des journaux.</p>
37   </summary>
38
39   <section id="overview">
40     <title>Vue d'ensemble</title>
41
42   <related>
43       <modulelist>
44         <module>mod_log_config</module>
45         <module>mod_log_forensic</module>
46         <module>mod_logio</module>
47         <module>mod_cgi</module>
48       </modulelist>
49   </related>
50
51   <p>
52   Le serveur HTTP Apache fournit toute une vari&eacute;t&eacute; de m&eacute;canismes
53   diff&eacute;rents pour la journalisation de tout ce qui peut se passer au
54   sein de votre serveur, depuis la requ&ecirc;te initiale, en passant par le
55   processus de mise en correspondance des URLs, et jusqu'&agrave; la fermeture
56   de la connexion, y compris toute erreur pouvant survenir au cours du
57   traitement. De plus, certains modules tiers fournissent des
58   fonctionnalit&eacute;s de journalisation ou ins&egrave;rent des entr&eacute;es dans les
59   fichiers journaux existants, et les applications comme les programmes
60   CGI, les scripts PHP ou autres gestionnaires peuvent envoyer des
61   messages vers le journal des erreurs du serveur.
62   </p>
63
64   <p>
65   Ce document d&eacute;crit le fonctionnement des modules de journalisation
66   fournis en standard avec le serveur httpd.
67   </p>
68
69   </section>
70
71   <section id="security">
72     <title>Avertissement &agrave; propos de la s&eacute;curit&eacute;</title>
73
74     <p>Tout utilisateur qui a les droits en &eacute;criture sur le r&eacute;pertoire dans
75     lequel Apache httpd &eacute;crit ses journaux pourra quasi
76     certainement avoir acc&egrave;s &agrave; l'uid sous lequel le serveur est d&eacute;marr&eacute;, en
77     l'occurrence habituellement root. N'accordez <em>PAS</em> aux utilisateurs
78     l'acc&egrave;s en &eacute;criture au r&eacute;pertoire dans lequel les journaux sont stock&eacute;s
79     sans savoir exactement quelles en seraient les cons&eacute;quences ; voir le
80     document <a href="misc/security_tips.html">conseils sur la s&eacute;curit&eacute;</a>
81     pour plus de d&eacute;tails.</p>
82
83     <p>En outre, les journaux peuvent contenir des informations fournies
84     directement par un client, sans caract&egrave;res d'&eacute;chappement. Des clients mal
85     intentionn&eacute;s peuvent donc ins&eacute;rer des caract&egrave;res de contr&ocirc;le dans les
86     journaux, et il convient par cons&eacute;quent d'&ecirc;tre tr&egrave;s prudent lors de la
87     manipulation des journaux bruts.</p>
88   </section>
89
90   <section id="errorlog">
91     <title>Journal des erreurs</title>
92
93     <related>
94       <modulelist>
95         <module>core</module>
96       </modulelist>
97       <directivelist>
98         <directive module="core">ErrorLog</directive>
99         <directive module="core">LogLevel</directive>
100       </directivelist>
101     </related>
102
103     <p>Le journal des erreurs du serveur, dont le nom et la localisation sont
104     d&eacute;finis par la directive <directive module="core">ErrorLog</directive>,
105     est le journal le plus important. C'est dans celui-ci
106     que le d&eacute;mon Apache httpd va envoyer les informations de diagnostic et
107     enregistrer toutes les erreurs qui surviennent lors du traitement des
108     requ&ecirc;tes. Lorsqu'un probl&egrave;me survient au d&eacute;marrage du serveur ou pendant
109     son fonctionnement, la premi&egrave;re chose &agrave; faire est de regarder dans ce
110     journal, car il vous renseignera souvent sur le probl&egrave;me rencontr&eacute; et
111     la mani&egrave;re d'y rem&eacute;dier.</p>
112
113     <p>Le journal des erreurs est habituellement enregistr&eacute; dans un fichier
114     (en g&eacute;n&eacute;ral <code>error_log</code> sur les syst&egrave;mes de type Unix et
115     <code>error.log</code> sur Windows et OS/2). Sur les syst&egrave;mes de type Unix,
116     le serveur peut aussi enregistrer ses erreurs dans
117     <code>syslog</code> ou les
118     <a href="#piped">rediriger vers un programme</a> par l'interm&eacute;diaire d'un
119     tube de communication (pipe).</p>
120
121     <p>Le format du journal des erreurs est descriptif et de forme
122     relativement libre. Certaines informations apparaissent cependant dans la
123     plupart des entr&eacute;es du journal. Voici un message typique
124     &agrave; titre d'exemple : </p>
125
126     <example>
127       [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
128       client denied by server configuration:
129       /export/home/live/ap/htdocs/test
130     </example>
131
132     <p>Le premier champ de l'entr&eacute;e du journal est la date et l'heure du
133     message. Le second champ indique la s&eacute;v&eacute;rit&eacute; de l'erreur rapport&eacute;e. La
134     directive <directive module="core">LogLevel</directive> permet de
135     restreindre le type des erreurs qui doivent &ecirc;tre enregistr&eacute;es
136     dans le journal des erreurs en d&eacute;finissant leur niveau de s&eacute;v&eacute;rit&eacute;. Le
137     troisi&egrave;me champ contient l'adresse IP du client qui a g&eacute;n&eacute;r&eacute; l'erreur.
138     Vient ensuite le message proprement dit, qui indique dans ce cas que le
139     serveur a &eacute;t&eacute; configur&eacute; pour interdire l'acc&egrave;s au client. Le serveur
140     indique le chemin syst&egrave;me du document requis (et non
141     son chemin web).</p>
142
143     <p>Une grande vari&eacute;t&eacute; de messages diff&eacute;rents peuvent appara&icirc;tre dans le
144     journal des erreurs. La plupart d'entre eux sont similaires &agrave; l'exemple
145     ci-dessus. Le journal des erreurs peut aussi contenir des informations de
146     d&eacute;bogage en provenance de scripts CGI. Toute information qu'un script CGI
147     &eacute;crit sur la sortie d'erreurs standard <code>stderr</code> sera recopi&eacute;e
148     telle quelle dans le journal des erreurs.</p>
149
150     <p>Il n'est pas possible de personnaliser le journal des erreurs en ajoutant ou en
151     supprimant des informations. Cependant, les entr&eacute;es du journal des erreurs
152     qui concernent certaines requ&ecirc;tes poss&egrave;dent des entr&eacute;es correspondantes
153     dans le <a href="#accesslog">journal des acc&egrave;s</a>. Ainsi, l'entr&eacute;e de
154     l'exemple ci-dessus correspond &agrave; une entr&eacute;e du journal des acc&egrave;s avec un
155     code de statut 403. Etant donn&eacute; qu'il est possible de personnaliser le
156     journal des acc&egrave;s, vous pouvez obtenir d'avantage d'informations sur les
157     circonstances d'une erreur en consultant ce journal.</p>
158
159     <p>Pendant la phase de test, il est souvent utile de visualiser en continu
160     le journal des erreurs afin de d&eacute;tecter tout probl&egrave;me &eacute;ventuel. Sur les
161     syst&egrave;mes de type Unix, ceci s'effectue &agrave; l'aide de la commande :</p>
162
163     <example>
164       tail -f error_log
165     </example>
166   </section>
167
168   <section id="permodule">
169     <title>Journalisation par module</title>
170
171     <p>La directive <directive module="core">LogLevel</directive> permet
172     de spécifier un niveau de sévérité de journalisation pour chaque
173     module. Vous pouvez ainsi résoudre un problème propre à un module particulier
174     en augmentant son volume de journalisation sans augmenter ce volume
175     pour les autres modules. Ceci est particulièrement utile lorsque
176     vous voulez obtenir des détails sur le fonctionnement de modules
177     comme <module>mod_proxy</module> ou <module>mod_rewrite</module>.</p>
178
179     <p>Pour ce faire, vous devez spécifier le nom du module dans votre
180     directive <directive>LogLevel</directive> :</p>
181
182     <example>
183     LogLevel info rewrite:trace5
184     </example>
185
186     <p>Dans cet exemple, le niveau de journalisation général est défini
187     à info, et à <code>trace5</code> pour <module>mod_rewrite</module>.</p>
188
189     <note>Cette directive remplace les directives de journalisation par
190     module des versions précédentes du serveur, comme
191     <code>RewriteLog</code>.</note>
192  </section>
193
194
195   <section id="accesslog">
196     <title>Journal des acc&egrave;s</title>
197
198     <related>
199       <modulelist>
200         <module>mod_log_config</module>
201         <module>mod_setenvif</module>
202       </modulelist>
203       <directivelist>
204         <directive module="mod_log_config">CustomLog</directive>
205         <directive module="mod_log_config">LogFormat</directive>
206         <directive module="mod_setenvif">SetEnvIf</directive>
207       </directivelist>
208     </related>
209
210     <p>Le journal des acc&egrave;s au serveur
211     enregistre toutes les requ&ecirc;tes que traite
212     ce dernier. La localisation et le contenu du journal des acc&egrave;s sont d&eacute;finis
213     par la directive <directive module="mod_log_config">CustomLog</directive>.
214     La directive <directive module="mod_log_config">LogFormat</directive>
215     permet de simplifier la s&eacute;lection du contenu du journal. Cette section
216     d&eacute;crit comment configurer le serveur pour l'enregistrement des informations
217     dans le journal des acc&egrave;s.</p>
218
219     <p>Bien &eacute;videmment, le stockage d'informations dans le journal des acc&egrave;s
220     n'est que le point de d&eacute;part de la gestion de la journalisation. L'&eacute;tape
221     suivante consiste &agrave; analyser ces informations de fa&ccedil;on &agrave; pouvoir en
222     extraire des statistiques utiles. L'analyse de journaux en g&eacute;n&eacute;ral est en
223     dehors du sujet de ce document et ne fait pas vraiment partie int&eacute;grante
224     du travail du serveur web lui-m&ecirc;me. Pour plus d'informations &agrave; propos de ce
225     sujet et des applications d&eacute;di&eacute;es &agrave; l'analyse de journaux, vous pouvez vous
226     r&eacute;f&eacute;rer &agrave; <a href="http://dmoz.org/Computers/Software/Internet/
227     Site_Management/Log_analysis/">Open Directory</a> ou
228     <a href="http://dir.yahoo.com/Computers_and_Internet/Software/
229     Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>.</p>
230
231     <p>Diff&eacute;rentes versions du d&eacute;mon Apache httpd utilisaient d'autres modules
232     et directives pour contr&ocirc;ler la journalisation des acc&egrave;s, &agrave; l'instar de
233     mod_log_referer, mod_log_agent, et de la directive
234     <code>TransferLog</code>. La directive
235     <directive  module="mod_log_config">CustomLog</directive> rassemble
236     d&eacute;sormais les fonctionnalit&eacute;s de toutes les anciennes directives.</p>
237
238     <p>Le format du journal des acc&egrave;s est hautement configurable. Il est
239     d&eacute;fini &agrave; l'aide d'une cha&icirc;ne de format qui ressemble sensiblement &agrave; la
240     cha&icirc;ne de format de style langage C de printf(1). Vous trouverez quelques
241     exemples dans les sections suivantes. Pour une liste exhaustive de ce que
242     peut contenir une cha&icirc;ne de format, vous pouvez vous r&eacute;f&eacute;rer au chapitre
243     <a href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a> de la
244     documentation du module <module>mod_log_config</module>.</p>
245
246     <section id="common">
247       <title>Format habituel du journal</title>
248
249       <p>Voici une configuration typique pour le journal des acc&egrave;s :</p>
250
251       <example>
252         LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
253          CustomLog logs/access_log common
254       </example>
255
256       <p>Ici est d&eacute;finie l'<em>identit&eacute;</em> <code>common</code> qui est
257       ensuite associ&eacute;e &agrave; une cha&icirc;ne de format de journalisation particuli&egrave;re.
258       La cha&icirc;ne de format est constitu&eacute;e de directives d&eacute;butant par le
259       caract&egrave;re %, chacune d'entre elles indiquant au serveur d'enregistrer
260       un &eacute;l&eacute;ment particulier d'information. Des caract&egrave;res litt&eacute;raux peuvent
261       aussi &ecirc;tre ins&eacute;r&eacute;s dans la cha&icirc;ne de format ; il seront copi&eacute;s tels
262       quels dans le flux de sortie destin&eacute; &agrave; la journalisation.
263       Les guillemets (<code>"</code>) doivent &ecirc;tre &eacute;chapp&eacute;es en les faisant
264       pr&eacute;c&eacute;der d'un anti-slash (<code>\</code>) afin qu'elles ne soient pas
265       interpr&eacute;t&eacute;es comme la fin de la cha&icirc;ne de format. La cha&icirc;ne de format
266       peut aussi contenir les caract&egrave;res de contr&ocirc;le sp&eacute;ciaux
267       "<code>\n</code>" et "<code>\t</code>" pour ins&eacute;rer respectivement
268       un passage &agrave; la ligne et une tabulation.</p>
269
270       <p>La directive <directive module="mod_log_config">CustomLog</directive>
271       d&eacute;finit un nouveau fichier journal en l'associant &agrave; l'identit&eacute;
272       pr&eacute;c&eacute;demment d&eacute;finie. Le chemin du nom de fichier associ&eacute; au journal
273       des acc&egrave;s est relatif au chemin d&eacute;fini par la directive
274       <directive module="core">ServerRoot</directive>, sauf s'il
275       d&eacute;bute par un slash.</p>
276
277       <p>La configuration ci-dessus va enregistrer les entr&eacute;es de
278       journalisation selon un format connu sous le nom de
279       Common Log Format (CLF) pour "Format de journalisation standard".
280       Ce format standard peut &ecirc;tre produit par de nombreux serveurs web
281       diff&eacute;rents et lu par de nombreux programmes d'analyse de journaux.
282       Les entr&eacute;es de fichier journal g&eacute;n&eacute;r&eacute;es selon le format CLF
283       ressemblent &agrave; ceci :</p>
284
285       <example>
286         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
287         /apache_pb.gif HTTP/1.0" 200 2326
288       </example>
289
290       <p>Chaque partie de cette entr&eacute;e de journal est d&eacute;crite
291       dans ce qui suit.</p>
292
293       <dl>
294         <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
295
296         <dd>Il s'agit de l'adresse IP du client (l'h&ocirc;te distant) qui a envoy&eacute;
297         la requ&ecirc;te au serveur. Si la directive
298         <directive module="core">HostnameLookups</directive> est positionn&eacute;e &agrave;
299         <code>On</code>, le serveur va essayer de d&eacute;terminer le nom de l'h&ocirc;te
300         et de l'enregistrer &agrave; la place de l'adresse IP. Cette configuration
301         n'est cependant pas recommand&eacute;e car elle peut ralentir le serveur de
302         mani&egrave;re significative. Il est par cons&eacute;quent pr&eacute;f&eacute;rable d'utiliser un
303         processeur d'analyse de journaux a posteriori
304         tel que <program>logresolve</program>
305         pour d&eacute;terminer les noms d'h&ocirc;te. L'adresse IP indiqu&eacute;e ici n'est pas
306         n&eacute;cessairement l'adresse IP de la machine devant laquelle se trouve
307         l'utilisateur. Si un serveur mandataire s'intercale entre le serveur
308         et l'utilisateur, l'adresse indiqu&eacute;e sera celle du mandataire et non
309         celle de la machine &agrave; l'origine de la requ&ecirc;te.</dd>
310
311         <dt><code>-</code> (<code>%l</code>)</dt>
312
313         <dd>Le "trait d'union" indique que la portion d'information
314         correspondante n'est pas disponible. Dans le cas pr&eacute;sent, l'information
315         non disponible est l'identit&eacute; (RFC 1413) du client telle que d&eacute;termin&eacute;e
316         par <code>identd</code> sur la machine cliente. Cette information est
317         tr&egrave;s peu fiable et ne devrait jamais &ecirc;tre utilis&eacute;e, sauf dans le cas
318         de r&eacute;seaux internes &eacute;troitement contr&ocirc;l&eacute;s. Le d&eacute;mon httpd ne cherchera
319         d'ailleurs &agrave; obtenir cette information que si la directive
320         <directive module="core">IdentityCheck</directive> est positionn&eacute;e
321         &agrave; <code>On</code>.</dd>
322
323         <dt><code>frank</code> (<code>%u</code>)</dt>
324
325         <dd>Il s'agit de l'identifiant utilisateur de la personne qui a
326         demand&eacute; le document, issu d'une authentification HTTP.
327         Ce m&ecirc;me identifiant est en g&eacute;n&eacute;ral fourni aux scripts CGI par
328         l'interm&eacute;diaire de la valeur de la variable d'environnement
329         <code>REMOTE_USER</code>. Si le statut de la requ&ecirc;te (voir plus loin)
330         est 401, cette identifiant n'est pas fiable car l'utilisateur n'est
331         pas encore authentifi&eacute;. Si le document n'est pas prot&eacute;g&eacute; par
332         mot de passe, cette partie d'information sera repr&eacute;sent&eacute;e par
333         "<code>-</code>", comme la partie pr&eacute;c&eacute;dente.</dd>
334
335         <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
336         (<code>%t</code>)</dt>
337
338         <dd>
339           L'heure &agrave; laquelle la requ&ecirc;te a &eacute;t&eacute; re&ccedil;ue.
340           Le format est le suivant :
341
342           <p class="indent">
343             <code>[jour/mois/ann&eacute;e:heure:minutes:secondes zone]<br />
344              jour = 2*chiffre<br />
345              mois = 3*lettre<br />
346              ann&eacute;e = 4*chiffre<br />
347              heure = 2*chiffre<br />
348              minutes = 2*chiffre<br />
349              secondes = 2*chiffre<br />
350              zone = (`+' | `-') 4*chiffre</code>
351           </p>Il est possible de modifier le format d'affichage de l'heure
352           en sp&eacute;cifiant <code>%{format}t</code> dans la cha&icirc;ne de format du
353           journal, o&ugrave; <code>format</code> est une cha&icirc;ne de format
354           de la forme de celle de la fonction <code>strftime(3)</code>
355           de la biblioth&egrave;que C standard, ou choisie parmi les
356           formats sp&eacute;ciaux support&eacute;s. Pour plus de d&eacute;tails,
357           reportez-vous aux. <a
358           href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a>
359           de <module>mod_log_config</module>.
360         </dd>
361
362         <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
363         (<code>\"%r\"</code>)</dt>
364
365         <dd>La ligne de la requ&ecirc;te du client est plac&eacute;e entre guillemets.
366         Elle contient de nombreuses informations utiles. Tout d'abord, la
367         m&eacute;thode utilis&eacute;e par le client est <code>GET</code>. Ensuite, le
368         client a demand&eacute; la ressource <code>/apache_pb.gif</code>, et enfin,
369         le client a utilis&eacute; le protocole <code>HTTP/1.0</code>. Il est aussi
370         possible d'enregistrer s&eacute;par&eacute;ment une ou plusieurs parties de la
371         requ&ecirc;te. Par exemple, la cha&icirc;ne de format "<code>%m %U %q %H</code>"
372         va enregistrer la m&eacute;thode, le chemin, la cha&icirc;ne de la requ&ecirc;te et le
373         protocole, ce qui donnera le m&ecirc;me r&eacute;sultat que
374         "<code>%r</code>".</dd>
375
376         <dt><code>200</code> (<code>%&gt;s</code>)</dt>
377
378         <dd>C'est le code de statut que le serveur retourne au client. Cette
379         information est tr&egrave;s importante car elle indique si la requ&ecirc;te a fait
380         l'objet d'une r&eacute;ponse positive (codes commen&ccedil;ant par 2), une
381         redirection (codes commen&ccedil;ant par 3), une erreur due au client (codes
382         commen&ccedil;ant par 4), ou une erreur due au serveur (codes commen&ccedil;ant
383         par 5). Vous trouverez la liste compl&egrave;te des codes de statut possibles
384         dans la <a href="http://www.w3.org/Protocols/rfc2616/
385         rfc2616.txt">specification HTTP</a> (RFC2616 section 10).</dd>
386
387         <dt><code>2326</code> (<code>%b</code>)</dt>
388
389         <dd>La derni&egrave;re partie indique la taille de l'objet retourn&eacute; au client,
390         en-t&ecirc;tes non compris. Si aucun contenu n'a &eacute;t&eacute; retourn&eacute; au client, cette
391         partie contiendra "<code>-</code>". Pour indiquer l'absence de contenu
392         par "<code>0</code>", utilisez <code>%B</code> au lieu de
393         <code>%b</code>.</dd>
394       </dl>
395     </section>
396
397     <section id="combined">
398       <title>Combined Log Format (Format de journalisation combin&eacute;)</title>
399
400       <p>Une autre cha&icirc;ne de format couramment utilis&eacute;e est le
401       "Combined Log Format" (Format de journalisation combin&eacute;). Il s'utilise
402       comme suit :</p>
403
404       <example>
405         LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
406         \"%{User-agent}i\"" combined<br />
407          CustomLog log/access_log combined
408       </example>
409
410       <p>Ce format est identique au Common Log Format, avec deux champs
411       suppl&eacute;mentaires. Chacun de ces deux champs utilise la directive
412       commen&ccedil;ant par le caract&egrave;re "%" <code>%{<em>header</em>}i</code>,
413       o&ugrave; <em>header</em> peut &ecirc;tre n'importe quel en-t&ecirc;te de requ&ecirc;te HTTP.
414       Avec ce format, le journal des acc&egrave;s se pr&eacute;sentera comme suit :</p>
415
416       <example>
417         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
418         /apache_pb.gif HTTP/1.0" 200 2326
419         "http://www.example.com/start.html" "Mozilla/4.08 [en]
420         (Win98; I ;Nav)"
421       </example>
422
423       <p>Les champs suppl&eacute;mentaires sont :</p>
424
425       <dl>
426         <dt><code>"http://www.example.com/start.html"</code>
427         (<code>\"%{Referer}i\"</code>)</dt>
428
429         <dd>L'en-t&ecirc;te "Referer" (sic) de la requ&ecirc;te HTTP. Il indique le site
430         depuis lequel le client pr&eacute;tend avoir lanc&eacute; sa requ&ecirc;te. (Ce doit &ecirc;tre
431         la page qui contient un lien vers <code>/apache_pb.gif</code> ou
432         inclut ce dernier fichier).</dd>
433
434         <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
435         (<code>\"%{User-agent}i\"</code>)</dt>
436
437         <dd>L'en-t&ecirc;te User-Agent de la requ&ecirc;te HTTP. C'est une information
438         d'identification que le navigateur du client envoie &agrave; propos
439         de lui-m&ecirc;me.</dd>
440       </dl>
441     </section>
442
443     <section id="multiple">
444       <title>Journaux d'acc&egrave;s multiples</title>
445
446       <p>Plusieurs journaux d'acc&egrave;s peuvent &ecirc;tre cr&eacute;&eacute;s en sp&eacute;cifiant tout
447       simplement plusieurs directives
448       <directive module="mod_log_config">CustomLog</directive> dans le
449       fichier de configuration. Par exemple, les directives suivantes vont
450       cr&eacute;er trois journaux d'acc&egrave;s. Le premier contiendra les informations
451       de base CLF, le second les informations du Referer, et le troisi&egrave;me
452       les informations sur le navigateur. Les deux derni&egrave;res directives
453       <directive module="mod_log_config">CustomLog</directive> montrent
454       comment simuler les effets des directives <code>ReferLog</code> et
455       <code>AgentLog</code>.</p>
456
457       <example>
458         LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
459         CustomLog logs/access_log common<br />
460         CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
461         CustomLog logs/agent_log "%{User-agent}i"
462       </example>
463
464       <p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
465       une cha&icirc;ne de format &agrave; un alias au moyen de la directive
466       <directive module="mod_log_config">LogFormat</directive>. Elle peut
467       &ecirc;tre d&eacute;finie directement dans la ligne de la directive
468       <directive module="mod_log_config">CustomLog</directive>.</p>
469     </section>
470
471     <section id="conditional">
472       <title>Journalisation conditionnelle</title>
473
474       <p>Il est parfois souhaitable d'exclure certaines entr&eacute;es des journaux
475       d'acc&egrave;s en fonction des caract&eacute;ristiques de la requ&ecirc;te du client. On
476       peut ais&eacute;ment accomplir ceci &agrave; l'aide des
477       <a href="env.html">variables d'environnement</a>. Tout d'abord, une
478       variable d'environnement doit &ecirc;tre d&eacute;finie pour indiquer que la
479       requ&ecirc;te remplit certaines conditions. Pour ceci, on utilise en g&eacute;n&eacute;ral
480       la directive <directive module="mod_setenvif">SetEnvIf</directive>,
481       puis la clause <code>env=</code> de la directive
482       <directive module="mod_log_config">CustomLog</directive> pour inclure
483       ou exclure les requ&ecirc;tes pour lesquelles
484       la variable d'environnement est d&eacute;finie.
485       Quelques exemples :</p>
486
487       <example>
488         # Marque les requ&ecirc;tes en provenance de l'interface loop-back<br />
489         SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
490         # Marque les requ&ecirc;tes pour le fichier robots.txt<br />
491         SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
492         # Journalise toutes les autres requ&ecirc;tes<br />
493         CustomLog logs/access_log common env=!dontlog
494       </example>
495
496       <p>Autre exemple, imaginons l'enregistrement des requ&ecirc;tes en provenance
497       d'utilisateurs de langue anglaise dans un journal, et celles des autres
498       utilisateurs dans un autre journal.</p>
499
500       <example>
501         SetEnvIf Accept-Language "en" english<br />
502         CustomLog logs/english_log common env=english<br />
503         CustomLog logs/non_english_log common env=!english
504       </example>
505
506         <p>Dans le contexte d'une mise en cache, il peut &ecirc;tre
507         int&eacute;ressant de conna&icirc;tre l'efficacit&eacute; du cache. Pour y parvenir,
508         on pourrait utiliser cette m&eacute;thode simple :</p>
509
510       <example>
511         SetEnv CACHE_MISS 1<br />
512         LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br />
513         CustomLog logs/access_log common-cache
514       </example>
515
516       <p><module>mod_cache</module> va s'ex&eacute;cuter avant
517       <module>mod_env</module>, et si son action est couronn&eacute;e de
518       succ&egrave;s, il d&eacute;livrera le contenu sans faire appel &agrave; ce dernier. Si
519       l'URL se trouve dans le cache, la valeur journalis&eacute;e sera alors
520       <code>-</code>, tandis que dans le cas contraire elle sera
521       <code>1</code>.</p>
522
523
524       <p>Bien que nous venions de montrer que la journalisation conditionnelle
525       est souple et tr&egrave;s puissante, cette m&eacute;thode de contr&ocirc;le du contenu des
526       journaux n'est pas la seule. Les fichiers journaux sont plus utiles
527       quand ils contiennent un enregistrement complet de l'activit&eacute; du serveur,
528       et il est souvent plus ais&eacute; de simplement traiter &agrave; posteriori les fichiers
529       journaux pour supprimer les requ&ecirc;tes que vous ne voulez pas y voir
530       appara&icirc;tre.</p>
531     </section>
532   </section>
533
534   <section id="rotation">
535     <title>Rotation des journaux</title>
536
537     <p>M&ecirc;me dans le cas d'un serveur mod&eacute;r&eacute;ment sollicit&eacute;, la quantit&eacute;
538     d'informations stock&eacute;es dans les fichiers journaux est tr&egrave;s importante.
539     Le fichier journal des acc&egrave;s grossit en g&eacute;n&eacute;ral d'1 Mo ou plus toutes
540     les 10000 requ&ecirc;tes. Il est par cons&eacute;quent n&eacute;cessaire d'effectuer
541     p&eacute;riodiquement la rotation des journaux en d&eacute;pla&ccedil;ant ou supprimant les
542     fichiers correspondants. On ne peut pas le faire pendant que le serveur
543     est en cours d'ex&eacute;cution, car Apache httpd va continuer &agrave; &eacute;crire dans l'ancien
544     fichier journal aussi longtemps qu'il le maintiendra ouvert.
545     C'est pourquoi le serveur doit &ecirc;tre
546     <a href="stopping.html">red&eacute;marr&eacute;</a> apr&egrave;s le d&eacute;placement ou la
547     suppression des fichiers journaux de fa&ccedil;on &agrave; ce qu'il en ouvre
548     de nouveaux.</p>
549
550     <p>Avec un red&eacute;marrage <em>graceful</em>, on peut faire en sorte que le
551     serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
552     existantes ou en cours avec les clients. Cependant, pour que ceci soit
553     possible, le serveur doit continuer &agrave; &eacute;crire dans les anciens fichiers
554     journaux pendant qu'il termine le traitement des requ&ecirc;tes en cours.
555     Il est donc n&eacute;cessaire d'attendre un certain temps apr&egrave;s le r&eacute;d&eacute;marrage
556     avant d'effectuer tout traitement sur les fichiers journaux. Voici un
557     sc&eacute;nario typique dans lequel on effectue une simple rotation des
558     journaux en compressant les anciens fichiers correspondants afin
559     de gagner de l'espace disque :</p>
560
561     <example>
562       mv access_log access_log.old<br />
563       mv error_log error_log.old<br />
564       apachectl graceful<br />
565       sleep 600<br />
566       gzip access_log.old error_log.old
567     </example>
568
569     <p>La section suivante pr&eacute;sente une autre m&eacute;thode de rotation des journaux
570     qui consiste &agrave; utiliser les
571     <a href="#piped">journaux redirig&eacute;s</a>.</p>
572   </section>
573
574   <section id="piped">
575     <title>Journaux redirig&eacute;s</title>
576
577     <p>Nous avons vu que le d&eacute;mon httpd &eacute;crivait les informations de
578     journalisation des erreurs et des acc&egrave;s dans un fichier journal ;
579     il peut aussi
580     rediriger ces informations vers un autre processus par l'interm&eacute;diaire d'un
581     tube de communication (pipe). Cette fonctionnalit&eacute; am&eacute;liore
582     consid&eacute;rablement la souplesse de la journalisation, sans ajouter de code
583     au serveur principal. Pour rediriger les informations de journalisation
584     vers un tube de communication, remplacez simplement le nom de fichier
585     journal par
586     le caract&egrave;re pipe "<code>|</code>", suivi du nom de l'ex&eacute;cutable qui va
587     recueillir les entr&eacute;es de journal sur son entr&eacute;e
588     standard. Le serveur va
589     lancer le processus de redirection des journaux au moment du d&eacute;marrage du
590     serveur, et le relancera s'il cesse de fonctionner
591     pendant l'ex&eacute;cution du serveur.
592     (Nous d&eacute;nommons cette technique "journalisation
593     redirig&eacute;e fiable" gr&acirc;ce &agrave; cette derni&egrave;re fonctionnalit&eacute;.)</p>
594
595     <p>Les processus de journalisation redirig&eacute;e sont lanc&eacute;s par le processus
596     httpd parent, et h&eacute;ritent de l'UID de ce dernier. Cela signifie que les
597     programmes de journalisation dirig&eacute;e s'ex&eacute;cutent g&eacute;n&eacute;ralement en tant que
598     root. Il est donc tr&egrave;s important que ces programmes soient simples et
599     s&eacute;curis&eacute;s.</p>
600
601     <p>Un des grands avantages de la journalisation redirig&eacute;e est la possibilit&eacute;
602     d'effectuer la rotation des journaux sans avoir &agrave; red&eacute;marrer le serveur. Pour
603     accomplir cette t&acirc;che, le serveur HTTP Apache fournit un programme simple
604     appel&eacute; <program>rotatelogs</program>. Par exemple, pour une rotation des
605     journaux toutes les 24 heures, ajoutez ces lignes :</p>
606
607     <example>
608       CustomLog "|/usr/local/apache/bin/rotatelogs
609       /var/log/access_log 86400" common
610     </example>
611
612     <p>Notez que l'ensemble de la commande qui sera appel&eacute;e par le tube de
613     communication a &eacute;t&eacute; plac&eacute;e entre guillemets. Bien que cet exemple
614     concerne le journal des acc&egrave;s, la m&ecirc;me technique peut &ecirc;tre utilis&eacute;e
615     pour le journal des erreurs.</p>
616
617     <p>Il existe un autre programme de rotation des journaux similaire mais
618     beaucoup plus souple : il s'agit de "cronolog", non fourni par Apache,
619     mais disponible <a href="http://www.cronolog.org/">ici</a>.</p>
620
621     <p>Comme la journalisation conditionnelle, la journalisation redirig&eacute;e est
622     un outil tr&egrave;s puissant, mais si elle existe, il est pr&eacute;f&eacute;rable d'utiliser
623     une solution plus simple comme le traitement &agrave; posteriori hors ligne.</p>
624   
625
626   <p>Par d&eacute;faut, le processus de redirection du journal est lanc&eacute; sans
627   invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
628   au lieu de "<code>|</code>" (en g&eacute;n&eacute;ral avec <code>/bin/sh -c</code>)
629   :</p>
630
631     <example>
632       # Invocation de "rotatelogs" en utilisant un shell<br />
633       CustomLog "|$/usr/local/apache/bin/rotatelogs
634       /var/log/access_log 86400" common
635     </example>
636
637     <p>Il s'agissait du comportement par d&eacute;faut sous Apache 2.2. Selon
638     les sp&eacute;cificit&eacute;s du shell, ceci peut g&eacute;n&eacute;rer un processus shell
639     suppl&eacute;mentaire pour toute la dur&eacute;e du programme de redirection du
640     journal, et induire des probl&egrave;mes de gestion de signaux au cours du
641     red&eacute;marrage. La notation "<code>||</code>" est aussi support&eacute;e pour
642     des raisons de compatibilit&eacute; avec Apache 2.2 et est &eacute;quivalente &agrave;
643     "<code>|</code>".</p>
644     </section>
645
646   <section id="virtualhost">
647     <title>H&ocirc;tes virtuels</title>
648
649     <p>Lorsqu'un serveur poss&egrave;de plusieurs <a href
650     ="vhosts/">h&ocirc;tes virtuels</a>, il existe de nombreuses solutions pour g&eacute;rer
651     les fichiers journaux. Par exemple, on peut utiliser les journaux comme
652     s'il s'agissait d'un serveur avec un seul h&ocirc;te. Il suffit pour cela de
653     placer les directives de journalisation en dehors des sections
654     <directive module="core" type="section">VirtualHost</directive> au niveau
655     du serveur principal, ce qui a pour effet de journaliser toutes les
656     requ&ecirc;tes dans le m&ecirc;me journal des acc&egrave;s et des erreurs. Cette technique
657     est cependant inappropri&eacute;e pour recueillir des statistiques sur chaque
658     h&ocirc;te virtuel individuellement.</p>
659
660     <p>Si des directives <directive module=
661     "mod_log_config">CustomLog</directive> ou
662     <directive module="core">ErrorLog</directive> sont plac&eacute;es dans une section
663     <directive module="core" type="section">VirtualHost</directive>, toutes les
664     requ&ecirc;tes ou erreurs pour cet h&ocirc;te virtuel ne seront enregistr&eacute;es que dans
665     le fichier sp&eacute;cifi&eacute;. Tout h&ocirc;te virtuel qui ne poss&egrave;de pas de directives de
666     journalisation verra ses requ&ecirc;tes enregistr&eacute;es dans le journal du serveur
667     principal. Cette technique est appropri&eacute;e pour un petit nombre d'h&ocirc;tes
668     virtuels, mais si ce nombre est important, elle peut devenir compliqu&eacute;e &agrave;
669     g&eacute;rer. En outre, des probl&egrave;mes de <a
670     href="vhosts/fd-limits.html">nombre de descripteurs
671     de fichiers insuffisant</a> peuvent rapidement appara&icirc;tre.</p>
672
673     <p>Il existe un tr&egrave;s bon compromis pour le journal des acc&egrave;s. En int&eacute;grant
674     les informations &agrave; propos de l'h&ocirc;te virtuel &agrave; la cha&icirc;ne de format du
675     journal, il est possible de journaliser tous les h&ocirc;tes dans le m&ecirc;me
676     journal, puis de s&eacute;parer ult&eacute;rieurement le journal en plusieurs journaux
677     individuels. Consid&eacute;rons par exemple les directives suivantes :</p>
678
679     <example>
680       LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
681       comonvhost<br />
682       CustomLog logs/access_log comonvhost
683     </example>
684
685     <p>Le champ <code>%v</code> sert &agrave; enregistrer le nom de l'h&ocirc;te virtuel qui
686     traite la requ&ecirc;te. Un programme tel que <a
687     href="programs/other.html">split-logfile</a> peut ensuite &ecirc;tre utilis&eacute;
688     pour g&eacute;n&eacute;rer "&agrave; froid" autant de journaux que d'h&ocirc;tes virtuels.</p>
689   </section>
690
691   <section id="other">
692     <title>Autres fichiers journaux</title>
693
694     <related>
695       <modulelist>
696         <module>mod_logio</module>
697         <module>mod_log_forensic</module>
698         <module>mod_cgi</module>
699       </modulelist>
700       <directivelist>
701         <directive module="mod_log_config">LogFormat</directive>
702         <directive module="mod_log_forensic">ForensicLog</directive>
703         <directive module="mpm_common">PidFile</directive>
704         <directive module="mod_cgi">ScriptLog</directive>
705         <directive module="mod_cgi">ScriptLogBuffer</directive>
706         <directive module="mod_cgi">ScriptLogLength</directive>
707       </directivelist>
708     </related>
709
710     <section>
711       <title>Enregistrement du nombre r&eacute;el d'octets envoy&eacute;s et re&ccedil;us</title>
712
713       <p>Le module <module>mod_logio</module> fournit deux champs
714       <directive module="mod_log_config">LogFormat</directive> suppl&eacute;mentaires
715       (%I et %O) qui permettent d'enregistrer le nombre r&eacute;el d'octets re&ccedil;us et
716       envoy&eacute;s sur le r&eacute;seau.</p>
717     </section>
718
719     <section>
720       <title>Journalisation de style investigation judiciaire (forensic logging)</title>
721
722       <p>Le module <module>mod_log_forensic</module> permet la journalisation
723       &agrave; des fins d'investigation judiciaire des requ&ecirc;tes des clients. La
724       journalisation est effectu&eacute;e avant et apr&egrave;s le traitement de la requ&ecirc;te,
725       qui fait donc l'objet de deux entr&eacute;es dans le journal. Le g&eacute;n&eacute;rateur de
726       journaux d'investigation est tr&egrave;s strict et ne permet aucune
727       personnalisation. C'est un inestimable outil de d&eacute;bogage et de s&eacute;curit&eacute;.</p>
728     </section>
729
730     <section id="pidfile">
731       <title>Fichier PID</title>
732
733       <p>Au d&eacute;marrage, le d&eacute;mon httpd Apache enregistre l'identifiant du
734       processus httpd parent dans le fichier <code>logs/httpd.pid</code>.
735       Le nom de ce fichier peut &ecirc;tre modifi&eacute; &agrave; l'aide de la directive
736       <directive module="mpm_common">PidFile</directive>. Cet identifiant
737       permet &agrave; l'administrateur de red&eacute;marrer et arr&ecirc;ter le d&eacute;mon en
738       envoyant des signaux au processus parent ; sous Windows, vous devez
739       utiliser l'option de ligne de commande -k. Pour plus de d&eacute;tails,
740       consulter la page <a href="stopping.html">Arr&ecirc;t et red&eacute;marrage</a>.</p>
741     </section>
742
743     <section id="scriptlog">
744       <title>Journal des scripts</title>
745
746       <p>Afin de faciliter le d&eacute;bogage, la directive
747       <directive module="mod_cgi">ScriptLog</directive> vous permet
748       d'enregistrer les entr&eacute;es et sorties des scripts CGI. Elle ne doit &ecirc;tre
749       utilis&eacute;e que pendant la phase de test, et en aucun cas sur un
750       serveur en production. Vous trouverez plus d'informations dans la
751       documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
752     </section>
753
754     <section id="rewritelog">
755       <title>Journal de r&eacute;&eacute;criture</title>
756
757       <p>Lorsqu'on utilise les fonctionnalit&eacute;s puissantes et complexes du
758       module <a href="mod/mod_rewrite.html">mod_rewrite</a>, il est presque
759       toujours n&eacute;cessaire d'utiliser la directive
760       <directive module="mod_rewrite">RewriteLog</directive> afin de
761       faciliter le d&eacute;bogage. Ce fichier journal fournit une analyse d&eacute;taill&eacute;e
762       de la transformation des requ&ecirc;tes par le moteur de r&eacute;&eacute;criture. Le niveau
763       de d&eacute;tail est contr&ocirc;l&eacute; par la directive
764       <directive module="mod_rewrite">RewriteLogLevel</directive>.</p>
765     </section>
766   </section>
767 </manualpage>
768
769
770
771