]> granicus.if.org Git - apache/blob - docs/manual/logs.xml.fr
Rebuild without modifying lang/fr.xml
[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 : 1657854 -->
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 par d&eacute;faut 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>La directive <directive module="core">ErrorLogFormat</directive>
151     vous permet de personnaliser le format du journal des erreurs, et de
152     d&eacute;finir les informations &agrave; journaliser. Si
153     <module>mod_unique_id</module> est pr&eacute;sent, vous pouvez utiliser le
154     drapeau <code>%L</code> &agrave; la fois dans le journal des erreurs et
155     dans le
156     journal des acc&egrave;s, ce qui aura pour effet de g&eacute;n&eacute;rer un identifiant
157     d'entr&eacute;e qui vous permettra de corr&eacute;ler les entr&eacute;es du journal des
158     erreurs avec celles du journal des acc&egrave;s.</p>
159
160     <p>Pendant la phase de test, il est souvent utile de visualiser en continu
161     le journal des erreurs afin de d&eacute;tecter tout probl&egrave;me &eacute;ventuel. Sur les
162     syst&egrave;mes de type Unix, ceci s'effectue &agrave; l'aide de la commande :</p>
163
164     <example>
165       tail -f error_log
166     </example>
167   </section>
168
169   <section id="permodule">
170     <title>Journalisation par module</title>
171
172     <p>La directive <directive module="core">LogLevel</directive> permet
173     de sp&eacute;cifier un niveau de s&eacute;v&eacute;rit&eacute; de journalisation pour chaque
174     module. Vous pouvez ainsi r&eacute;soudre un probl&egrave;me propre &agrave; un module particulier
175     en augmentant son volume de journalisation sans augmenter ce volume
176     pour les autres modules. Ceci est particuli&egrave;rement utile lorsque
177     vous voulez obtenir des d&eacute;tails sur le fonctionnement de modules
178     comme <module>mod_proxy</module> ou <module>mod_rewrite</module>.</p>
179
180     <p>Pour ce faire, vous devez sp&eacute;cifier le nom du module dans votre
181     directive <directive>LogLevel</directive> :</p>
182
183     <highlight language="config">
184     LogLevel info rewrite:trace5
185     </highlight>
186
187     <p>Dans cet exemple, le niveau de journalisation g&eacute;n&eacute;ral est d&eacute;fini
188     &agrave; info, et &agrave; <code>trace5</code> pour <module>mod_rewrite</module>.</p>
189
190     <note>Cette directive remplace les directives de journalisation par
191     module des versions pr&eacute;c&eacute;dentes du serveur, comme
192     <code>RewriteLog</code>.</note>
193  </section>
194
195
196   <section id="accesslog">
197     <title>Journal des acc&egrave;s</title>
198
199     <related>
200       <modulelist>
201         <module>mod_log_config</module>
202         <module>mod_setenvif</module>
203       </modulelist>
204       <directivelist>
205         <directive module="mod_log_config">CustomLog</directive>
206         <directive module="mod_log_config">LogFormat</directive>
207         <directive module="mod_setenvif">SetEnvIf</directive>
208       </directivelist>
209     </related>
210
211     <p>Le journal des acc&egrave;s au serveur
212     enregistre toutes les requ&ecirc;tes que traite
213     ce dernier. La localisation et le contenu du journal des acc&egrave;s sont d&eacute;finis
214     par la directive <directive module="mod_log_config">CustomLog</directive>.
215     La directive <directive module="mod_log_config">LogFormat</directive>
216     permet de simplifier la s&eacute;lection du contenu du journal. Cette section
217     d&eacute;crit comment configurer le serveur pour l'enregistrement des informations
218     dans le journal des acc&egrave;s.</p>
219
220     <p>Bien &eacute;videmment, le stockage d'informations dans le journal des acc&egrave;s
221     n'est que le point de d&eacute;part de la gestion de la journalisation. L'&eacute;tape
222     suivante consiste &agrave; analyser ces informations de fa&ccedil;on &agrave; pouvoir en
223     extraire des statistiques utiles. L'analyse de journaux en g&eacute;n&eacute;ral est en
224     dehors du sujet de ce document et ne fait pas vraiment partie int&eacute;grante
225     du travail du serveur web lui-m&ecirc;me. Pour plus d'informations &agrave; propos de ce
226     sujet et des applications d&eacute;di&eacute;es &agrave; l'analyse de journaux, vous pouvez vous
227     r&eacute;f&eacute;rer &agrave; <a href="http://dmoz.org/Computers/Software/Internet/
228     Site_Management/Log_analysis/">Open Directory</a> ou
229     <a href="http://dir.yahoo.com/Computers_and_Internet/Software/
230     Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>.</p>
231
232     <p>Diff&eacute;rentes versions du d&eacute;mon Apache httpd utilisaient d'autres modules
233     et directives pour contr&ocirc;ler la journalisation des acc&egrave;s, &agrave; l'instar de
234     mod_log_referer, mod_log_agent, et de la directive
235     <code>TransferLog</code>. La directive
236     <directive  module="mod_log_config">CustomLog</directive> rassemble
237     d&eacute;sormais les fonctionnalit&eacute;s de toutes les anciennes directives.</p>
238
239     <p>Le format du journal des acc&egrave;s est hautement configurable. Il est
240     d&eacute;fini &agrave; l'aide d'une cha&icirc;ne de format qui ressemble sensiblement &agrave; la
241     cha&icirc;ne de format de style langage C de printf(1). Vous trouverez quelques
242     exemples dans les sections suivantes. Pour une liste exhaustive de ce que
243     peut contenir une cha&icirc;ne de format, vous pouvez vous r&eacute;f&eacute;rer au chapitre
244     <a href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a> de la
245     documentation du module <module>mod_log_config</module>.</p>
246
247     <section id="common">
248       <title>Format habituel du journal</title>
249
250       <p>Voici une configuration typique pour le journal des acc&egrave;s :</p>
251
252       <highlight language="config">
253 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
254 CustomLog logs/access_log common
255       </highlight>
256
257       <p>Ici est d&eacute;finie l'<em>identit&eacute;</em> <code>common</code> qui est
258       ensuite associ&eacute;e &agrave; une cha&icirc;ne de format de journalisation particuli&egrave;re.
259       La cha&icirc;ne de format est constitu&eacute;e de directives d&eacute;butant par le
260       caract&egrave;re %, chacune d'entre elles indiquant au serveur d'enregistrer
261       un &eacute;l&eacute;ment particulier d'information. Des caract&egrave;res litt&eacute;raux peuvent
262       aussi &ecirc;tre ins&eacute;r&eacute;s dans la cha&icirc;ne de format ; il seront copi&eacute;s tels
263       quels dans le flux de sortie destin&eacute; &agrave; la journalisation.
264       Les guillemets (<code>"</code>) doivent &ecirc;tre &eacute;chapp&eacute;es en les faisant
265       pr&eacute;c&eacute;der d'un anti-slash (<code>\</code>) afin qu'elles ne soient pas
266       interpr&eacute;t&eacute;es comme la fin de la cha&icirc;ne de format. La cha&icirc;ne de format
267       peut aussi contenir les caract&egrave;res de contr&ocirc;le sp&eacute;ciaux
268       "<code>\n</code>" et "<code>\t</code>" pour ins&eacute;rer respectivement
269       un passage &agrave; la ligne et une tabulation.</p>
270
271       <p>La directive <directive module="mod_log_config">CustomLog</directive>
272       d&eacute;finit un nouveau fichier journal en l'associant &agrave; l'identit&eacute;
273       pr&eacute;c&eacute;demment d&eacute;finie. Le chemin du nom de fichier associ&eacute; au journal
274       des acc&egrave;s est relatif au chemin d&eacute;fini par la directive
275       <directive module="core">ServerRoot</directive>, sauf s'il
276       d&eacute;bute par un slash.</p>
277
278       <p>La configuration ci-dessus va enregistrer les entr&eacute;es de
279       journalisation selon un format connu sous le nom de
280       Common Log Format (CLF) pour "Format de journalisation standard".
281       Ce format standard peut &ecirc;tre produit par de nombreux serveurs web
282       diff&eacute;rents et lu par de nombreux programmes d'analyse de journaux.
283       Les entr&eacute;es de fichier journal g&eacute;n&eacute;r&eacute;es selon le format CLF
284       ressemblent &agrave; ceci :</p>
285
286       <example>
287         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
288         /apache_pb.gif HTTP/1.0" 200 2326
289       </example>
290
291       <p>Chaque partie de cette entr&eacute;e de journal est d&eacute;crite
292       dans ce qui suit.</p>
293
294       <dl>
295         <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
296
297         <dd>Il s'agit de l'adresse IP du client (l'h&ocirc;te distant) qui a envoy&eacute;
298         la requ&ecirc;te au serveur. Si la directive
299         <directive module="core">HostnameLookups</directive> est positionn&eacute;e &agrave;
300         <code>On</code>, le serveur va essayer de d&eacute;terminer le nom de l'h&ocirc;te
301         et de l'enregistrer &agrave; la place de l'adresse IP. Cette configuration
302         n'est cependant pas recommand&eacute;e car elle peut ralentir le serveur de
303         mani&egrave;re significative. Il est par cons&eacute;quent pr&eacute;f&eacute;rable d'utiliser un
304         processeur d'analyse de journaux a posteriori
305         tel que <program>logresolve</program>
306         pour d&eacute;terminer les noms d'h&ocirc;te. L'adresse IP indiqu&eacute;e ici n'est pas
307         n&eacute;cessairement l'adresse IP de la machine devant laquelle se trouve
308         l'utilisateur. Si un serveur mandataire s'intercale entre le serveur
309         et l'utilisateur, l'adresse indiqu&eacute;e sera celle du mandataire et non
310         celle de la machine &agrave; l'origine de la requ&ecirc;te.</dd>
311
312         <dt><code>-</code> (<code>%l</code>)</dt>
313
314         <dd>Le "trait d'union" indique que la portion d'information
315         correspondante n'est pas disponible. Dans le cas pr&eacute;sent, l'information
316         non disponible est l'identit&eacute; (RFC 1413) du client telle que d&eacute;termin&eacute;e
317         par <code>identd</code> sur la machine cliente. Cette information est
318         tr&egrave;s peu fiable et ne devrait jamais &ecirc;tre utilis&eacute;e, sauf dans le cas
319         de r&eacute;seaux internes &eacute;troitement contr&ocirc;l&eacute;s. Le d&eacute;mon httpd ne cherchera
320         d'ailleurs &agrave; obtenir cette information que si la directive
321         <directive module="mod_ident">IdentityCheck</directive> est positionn&eacute;e
322         &agrave; <code>On</code>.</dd>
323
324         <dt><code>frank</code> (<code>%u</code>)</dt>
325
326         <dd>Il s'agit de l'identifiant utilisateur de la personne qui a
327         demand&eacute; le document, issu d'une authentification HTTP.
328         Ce m&ecirc;me identifiant est en g&eacute;n&eacute;ral fourni aux scripts CGI par
329         l'interm&eacute;diaire de la valeur de la variable d'environnement
330         <code>REMOTE_USER</code>. Si le statut de la requ&ecirc;te (voir plus loin)
331         est 401, cette identifiant n'est pas fiable car l'utilisateur n'est
332         pas encore authentifi&eacute;. Si le document n'est pas prot&eacute;g&eacute; par
333         mot de passe, cette partie d'information sera repr&eacute;sent&eacute;e par
334         "<code>-</code>", comme la partie pr&eacute;c&eacute;dente.</dd>
335
336         <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
337         (<code>%t</code>)</dt>
338
339         <dd>
340           L'heure &agrave; laquelle la requ&ecirc;te a &eacute;t&eacute; re&ccedil;ue.
341           Le format est le suivant :
342
343           <p class="indent">
344             <code>[jour/mois/ann&eacute;e:heure:minutes:secondes zone]<br />
345              jour = 2*chiffre<br />
346              mois = 3*lettre<br />
347              ann&eacute;e = 4*chiffre<br />
348              heure = 2*chiffre<br />
349              minutes = 2*chiffre<br />
350              secondes = 2*chiffre<br />
351              zone = (`+' | `-') 4*chiffre</code>
352           </p>Il est possible de modifier le format d'affichage de l'heure
353           en sp&eacute;cifiant <code>%{format}t</code> dans la cha&icirc;ne de format du
354           journal, o&ugrave; <code>format</code> est une cha&icirc;ne de format
355           de la forme de celle de la fonction <code>strftime(3)</code>
356           de la biblioth&egrave;que C standard, ou choisie parmi les
357           formats sp&eacute;ciaux support&eacute;s. Pour plus de d&eacute;tails,
358           reportez-vous aux. <a
359           href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a>
360           de <module>mod_log_config</module>.
361         </dd>
362
363         <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
364         (<code>\"%r\"</code>)</dt>
365
366         <dd>La ligne de la requ&ecirc;te du client est plac&eacute;e entre guillemets.
367         Elle contient de nombreuses informations utiles. Tout d'abord, la
368         m&eacute;thode utilis&eacute;e par le client est <code>GET</code>. Ensuite, le
369         client a demand&eacute; la ressource <code>/apache_pb.gif</code>, et enfin,
370         le client a utilis&eacute; le protocole <code>HTTP/1.0</code>. Il est aussi
371         possible d'enregistrer s&eacute;par&eacute;ment une ou plusieurs parties de la
372         requ&ecirc;te. Par exemple, la cha&icirc;ne de format "<code>%m %U %q %H</code>"
373         va enregistrer la m&eacute;thode, le chemin, la cha&icirc;ne de la requ&ecirc;te et le
374         protocole, ce qui donnera le m&ecirc;me r&eacute;sultat que
375         "<code>%r</code>".</dd>
376
377         <dt><code>200</code> (<code>%&gt;s</code>)</dt>
378
379         <dd>C'est le code de statut que le serveur retourne au client. Cette
380         information est tr&egrave;s importante car elle indique si la requ&ecirc;te a fait
381         l'objet d'une r&eacute;ponse positive (codes commen&ccedil;ant par 2), une
382         redirection (codes commen&ccedil;ant par 3), une erreur due au client (codes
383         commen&ccedil;ant par 4), ou une erreur due au serveur (codes commen&ccedil;ant
384         par 5). Vous trouverez la liste compl&egrave;te des codes de statut possibles
385         dans la <a href="http://www.w3.org/Protocols/rfc2616/
386         rfc2616.txt">specification HTTP</a> (RFC2616 section 10).</dd>
387
388         <dt><code>2326</code> (<code>%b</code>)</dt>
389
390         <dd>La derni&egrave;re partie indique la taille de l'objet retourn&eacute; au client,
391         en-t&ecirc;tes non compris. Si aucun contenu n'a &eacute;t&eacute; retourn&eacute; au client, cette
392         partie contiendra "<code>-</code>". Pour indiquer l'absence de contenu
393         par "<code>0</code>", utilisez <code>%B</code> au lieu de
394         <code>%b</code>.</dd>
395       </dl>
396     </section>
397
398     <section id="combined">
399       <title>Combined Log Format (Format de journalisation combin&eacute;)</title>
400
401       <p>Une autre cha&icirc;ne de format couramment utilis&eacute;e est le
402       "Combined Log Format" (Format de journalisation combin&eacute;). Il s'utilise
403       comme suit :</p>
404
405       <highlight language="config">
406 LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
407 CustomLog log/access_log combined
408       </highlight>
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       <highlight language="config">
458 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
459 CustomLog logs/access_log common
460 CustomLog logs/referer_log "%{Referer}i -&gt; %U"
461 CustomLog logs/agent_log "%{User-agent}i"
462       </highlight>
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       <highlight language="config">
488 # Marque les requ&ecirc;tes en provenance de l'interface loop-back
489 SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
490 # Marque les requ&ecirc;tes pour le fichier robots.txt
491 SetEnvIf Request_URI "^/robots\.txt$" dontlog
492 # Journalise toutes les autres requ&ecirc;tes
493 CustomLog logs/access_log common env=!dontlog
494       </highlight>
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       <highlight language="config">
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       </highlight>
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       <highlight language="config">
511 SetEnv CACHE_MISS 1
512 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
513 CustomLog logs/access_log common-cache
514       </highlight>
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       <p>En plus de la syntaxe <code>env=</code>, la directive <directive
524       module="mod_log_config">LogFormat</directive> supporte les
525       valeurs de journalisation conditionnelles bas&eacute;es sur le code de la
526       r&eacute;ponse HTTP :</p>
527
528       <highlight language="config">
529 LogFormat "%400,501{User-agent}i" browserlog
530 LogFormat "%!200,304,302{Referer}i" refererlog
531       </highlight>
532
533       <p>Dans le premier exemple, le <code>User-agent</code> sera
534       enregistr&eacute; si le code d'&eacute;tat HTTP est 400 ou 501. Dans le cas
535       contraire, c'est un caract&egrave;re "-" qui sera enregistr&eacute; &agrave; la place.
536       Dans le second exemple, le <code>Referer</code> sera enregistr&eacute; si
537       le code d'&eacute;tat HTTP n'est <strong>pas</strong> 200, 204, ou 302
538       (remarquez le caract&egrave;re "!" avant les codes d'&eacute;tat).</p>
539
540       <p>Bien que nous venions de montrer que la journalisation conditionnelle
541       est souple et tr&egrave;s puissante, cette m&eacute;thode de contr&ocirc;le du contenu des
542       journaux n'est pas la seule. Les fichiers journaux sont plus utiles
543       quand ils contiennent un enregistrement complet de l'activit&eacute; du serveur,
544       et il est souvent plus ais&eacute; de simplement traiter &agrave; posteriori les fichiers
545       journaux pour supprimer les requ&ecirc;tes que vous ne voulez pas y voir
546       appara&icirc;tre.</p>
547     </section>
548   </section>
549
550   <section id="rotation">
551     <title>Rotation des journaux</title>
552
553     <p>M&ecirc;me dans le cas d'un serveur mod&eacute;r&eacute;ment sollicit&eacute;, la quantit&eacute;
554     d'informations stock&eacute;es dans les fichiers journaux est tr&egrave;s importante.
555     Le fichier journal des acc&egrave;s grossit en g&eacute;n&eacute;ral d'1 Mo ou plus toutes
556     les 10000 requ&ecirc;tes. Il est par cons&eacute;quent n&eacute;cessaire d'effectuer
557     p&eacute;riodiquement la rotation des journaux en d&eacute;pla&ccedil;ant ou supprimant les
558     fichiers correspondants. On ne peut pas le faire pendant que le serveur
559     est en cours d'ex&eacute;cution, car Apache httpd va continuer &agrave; &eacute;crire dans l'ancien
560     fichier journal aussi longtemps qu'il le maintiendra ouvert.
561     C'est pourquoi le serveur doit &ecirc;tre
562     <a href="stopping.html">red&eacute;marr&eacute;</a> apr&egrave;s le d&eacute;placement ou la
563     suppression des fichiers journaux de fa&ccedil;on &agrave; ce qu'il en ouvre
564     de nouveaux.</p>
565
566     <p>Avec un red&eacute;marrage <em>graceful</em>, on peut faire en sorte que le
567     serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
568     existantes ou en cours avec les clients. Cependant, pour que ceci soit
569     possible, le serveur doit continuer &agrave; &eacute;crire dans les anciens fichiers
570     journaux pendant qu'il termine le traitement des requ&ecirc;tes en cours.
571     Il est donc n&eacute;cessaire d'attendre un certain temps apr&egrave;s le r&eacute;d&eacute;marrage
572     avant d'effectuer tout traitement sur les fichiers journaux. Voici un
573     sc&eacute;nario typique dans lequel on effectue une simple rotation des
574     journaux en compressant les anciens fichiers correspondants afin
575     de gagner de l'espace disque :</p>
576
577     <example>
578       mv access_log access_log.old<br />
579       mv error_log error_log.old<br />
580       apachectl graceful<br />
581       sleep 600<br />
582       gzip access_log.old error_log.old
583     </example>
584
585     <p>La section suivante pr&eacute;sente une autre m&eacute;thode de rotation des journaux
586     qui consiste &agrave; utiliser les
587     <a href="#piped">journaux redirig&eacute;s</a>.</p>
588   </section>
589
590   <section id="piped">
591     <title>Journaux redirig&eacute;s</title>
592
593     <p>Nous avons vu que le d&eacute;mon httpd &eacute;crivait les informations de
594     journalisation des erreurs et des acc&egrave;s dans un fichier journal ;
595     il peut aussi
596     rediriger ces informations vers un autre processus par l'interm&eacute;diaire d'un
597     tube de communication (pipe). Cette fonctionnalit&eacute; am&eacute;liore
598     consid&eacute;rablement la souplesse de la journalisation, sans ajouter de code
599     au serveur principal. Pour rediriger les informations de journalisation
600     vers un tube de communication, remplacez simplement le nom de fichier
601     journal par
602     le caract&egrave;re pipe "<code>|</code>", suivi du nom de l'ex&eacute;cutable qui va
603     recueillir les entr&eacute;es de journal sur son entr&eacute;e
604     standard. Le serveur va
605     lancer le processus de redirection des journaux au moment du d&eacute;marrage du
606     serveur, et le relancera s'il cesse de fonctionner
607     pendant l'ex&eacute;cution du serveur.
608     (Nous d&eacute;nommons cette technique "journalisation
609     redirig&eacute;e fiable" gr&acirc;ce &agrave; cette derni&egrave;re fonctionnalit&eacute;.)</p>
610
611     <p>Les processus de journalisation redirig&eacute;e sont lanc&eacute;s par le processus
612     httpd parent, et h&eacute;ritent de l'UID de ce dernier. Cela signifie que les
613     programmes de journalisation dirig&eacute;e s'ex&eacute;cutent g&eacute;n&eacute;ralement en tant que
614     root. Il est donc tr&egrave;s important que ces programmes soient simples et
615     s&eacute;curis&eacute;s.</p>
616
617     <p>Un des grands avantages de la journalisation redirig&eacute;e est la possibilit&eacute;
618     d'effectuer la rotation des journaux sans avoir &agrave; red&eacute;marrer le serveur. Pour
619     accomplir cette t&acirc;che, le serveur HTTP Apache fournit un programme simple
620     appel&eacute; <program>rotatelogs</program>. Par exemple, pour une rotation des
621     journaux toutes les 24 heures, ajoutez ces lignes :</p>
622
623     <highlight language="config">
624       CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
625     </highlight>
626
627     <p>Notez que l'ensemble de la commande qui sera appel&eacute;e par le tube de
628     communication a &eacute;t&eacute; plac&eacute;e entre guillemets. Bien que cet exemple
629     concerne le journal des acc&egrave;s, la m&ecirc;me technique peut &ecirc;tre utilis&eacute;e
630     pour le journal des erreurs.</p>
631
632     <p>Comme la journalisation conditionnelle, la journalisation redirig&eacute;e est
633     un outil tr&egrave;s puissant, mais si elle existe, il est pr&eacute;f&eacute;rable d'utiliser
634     une solution plus simple comme le traitement &agrave; posteriori hors ligne.</p>
635
636
637   <p>Par d&eacute;faut, le processus de redirection du journal est lanc&eacute; sans
638   invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
639   au lieu de "<code>|</code>" (en g&eacute;n&eacute;ral avec <code>/bin/sh -c</code>)
640   :</p>
641
642     <highlight language="config">
643 # Invocation de "rotatelogs" en utilisant un shell
644 CustomLog "|$/usr/local/apache/bin/rotatelogs   /var/log/access_log 86400" common
645     </highlight>
646
647
648     <p>Il s'agissait du comportement par d&eacute;faut sous Apache 2.2. Selon
649     les sp&eacute;cificit&eacute;s du shell, ceci peut g&eacute;n&eacute;rer un processus shell
650     suppl&eacute;mentaire pour toute la dur&eacute;e du programme de redirection du
651     journal, et induire des probl&egrave;mes de gestion de signaux au cours du
652     red&eacute;marrage. La notation "<code>||</code>" est aussi support&eacute;e pour
653     des raisons de compatibilit&eacute; avec Apache 2.2 et est &eacute;quivalente &agrave;
654     "<code>|</code>".</p>
655
656     <note><title>Note &agrave; propos de la plateforme Windows</title>
657     <p>Notez que sous Windows, la m&eacute;moire allou&eacute;e au bureau (desktop
658     heap) peut devenir insuffisante si vous utilisez de nombreux
659     processus vers lesquels sont redirig&eacute;s des journaux via un pipe, et
660     ceci particuli&egrave;rement si httpd s'ex&eacute;cute en tant que service. La
661     quantit&eacute; de m&eacute;moire du bureau allou&eacute;e &agrave; chaque service est sp&eacute;cifi&eacute;e
662     dans le troisi&egrave;me argument du param&egrave;tre <code>SharedSection</code>
663     de la cl&eacute; de registre
664     HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\SubSystems\Windows.
665     <strong>Modifiez cette valeur avec prudence</strong> ; les
666     pr&eacute;cautions d'usage s'imposent lorsqu'on modifie la base de registre,
667     mais vous pouvez aussi saturer la m&eacute;moire du bureau si vous
668     sp&eacute;cifiez une valeur trop &eacute;lev&eacute;e.</p>
669     </note>
670     </section>
671
672   <section id="virtualhost">
673     <title>H&ocirc;tes virtuels</title>
674
675     <p>Lorsqu'un serveur poss&egrave;de plusieurs <a href
676     ="vhosts/">h&ocirc;tes virtuels</a>, il existe de nombreuses solutions pour g&eacute;rer
677     les fichiers journaux. Par exemple, on peut utiliser les journaux comme
678     s'il s'agissait d'un serveur avec un seul h&ocirc;te. Il suffit pour cela de
679     placer les directives de journalisation en dehors des sections
680     <directive module="core" type="section">VirtualHost</directive> au niveau
681     du serveur principal, ce qui a pour effet de journaliser toutes les
682     requ&ecirc;tes dans le m&ecirc;me journal des acc&egrave;s et des erreurs. Cette technique
683     est cependant inappropri&eacute;e pour recueillir des statistiques sur chaque
684     h&ocirc;te virtuel individuellement.</p>
685
686     <p>Si des directives <directive module=
687     "mod_log_config">CustomLog</directive> ou
688     <directive module="core">ErrorLog</directive> sont plac&eacute;es dans une section
689     <directive module="core" type="section">VirtualHost</directive>, toutes les
690     requ&ecirc;tes ou erreurs pour cet h&ocirc;te virtuel ne seront enregistr&eacute;es que dans
691     le fichier sp&eacute;cifi&eacute;. Tout h&ocirc;te virtuel qui ne poss&egrave;de pas de directives de
692     journalisation verra ses requ&ecirc;tes enregistr&eacute;es dans le journal du serveur
693     principal. Cette technique est appropri&eacute;e pour un petit nombre d'h&ocirc;tes
694     virtuels, mais si ce nombre est important, elle peut devenir compliqu&eacute;e &agrave;
695     g&eacute;rer. En outre, des probl&egrave;mes de <a
696     href="vhosts/fd-limits.html">nombre de descripteurs
697     de fichiers insuffisant</a> peuvent rapidement appara&icirc;tre.</p>
698
699     <p>Il existe un tr&egrave;s bon compromis pour le journal des acc&egrave;s. En int&eacute;grant
700     les informations &agrave; propos de l'h&ocirc;te virtuel &agrave; la cha&icirc;ne de format du
701     journal, il est possible de journaliser tous les h&ocirc;tes dans le m&ecirc;me
702     journal, puis de s&eacute;parer ult&eacute;rieurement le journal en plusieurs journaux
703     individuels. Consid&eacute;rons par exemple les directives suivantes :</p>
704
705     <highlight language="config">
706 LogFormat "%v %l %u %t \"%r\" %&gt;s %b" comonvhost
707 CustomLog logs/access_log comonvhost
708     </highlight>
709
710     <p>Le champ <code>%v</code> sert &agrave; enregistrer le nom de l'h&ocirc;te virtuel qui
711     traite la requ&ecirc;te. Un programme tel que <a
712     href="programs/split-logfile.html">split-logfile</a> peut ensuite &ecirc;tre utilis&eacute;
713     pour g&eacute;n&eacute;rer "&agrave; froid" autant de journaux que d'h&ocirc;tes virtuels.</p>
714   </section>
715
716   <section id="other">
717     <title>Autres fichiers journaux</title>
718
719     <related>
720       <modulelist>
721         <module>mod_logio</module>
722         <module>mod_log_config</module>
723         <module>mod_log_forensic</module>
724         <module>mod_cgi</module>
725       </modulelist>
726       <directivelist>
727         <directive module="mod_log_config">LogFormat</directive>
728         <directive module="mod_log_config">BufferedLogs</directive>
729         <directive module="mod_log_forensic">ForensicLog</directive>
730         <directive module="mpm_common">PidFile</directive>
731         <directive module="mod_cgi">ScriptLog</directive>
732         <directive module="mod_cgi">ScriptLogBuffer</directive>
733         <directive module="mod_cgi">ScriptLogLength</directive>
734       </directivelist>
735     </related>
736
737     <section>
738       <title>Enregistrement du nombre r&eacute;el d'octets envoy&eacute;s et re&ccedil;us</title>
739
740       <p>Le module <module>mod_logio</module> fournit deux champs
741       <directive module="mod_log_config">LogFormat</directive> suppl&eacute;mentaires
742       (%I et %O) qui permettent d'enregistrer le nombre r&eacute;el d'octets re&ccedil;us et
743       envoy&eacute;s sur le r&eacute;seau.</p>
744     </section>
745
746     <section>
747       <title>Journalisation de style investigation judiciaire (forensic logging)</title>
748
749       <p>Le module <module>mod_log_forensic</module> permet la journalisation
750       &agrave; des fins d'investigation judiciaire des requ&ecirc;tes des clients. La
751       journalisation est effectu&eacute;e avant et apr&egrave;s le traitement de la requ&ecirc;te,
752       qui fait donc l'objet de deux entr&eacute;es dans le journal. Le g&eacute;n&eacute;rateur de
753       journaux d'investigation est tr&egrave;s strict et ne permet aucune
754       personnalisation. C'est un inestimable outil de d&eacute;bogage et de s&eacute;curit&eacute;.</p>
755     </section>
756
757     <section id="pidfile">
758       <title>Fichier PID</title>
759
760       <p>Au d&eacute;marrage, le d&eacute;mon httpd Apache enregistre l'identifiant du
761       processus httpd parent dans le fichier <code>logs/httpd.pid</code>.
762       Le nom de ce fichier peut &ecirc;tre modifi&eacute; &agrave; l'aide de la directive
763       <directive module="mpm_common">PidFile</directive>. Cet identifiant
764       permet &agrave; l'administrateur de red&eacute;marrer et arr&ecirc;ter le d&eacute;mon en
765       envoyant des signaux au processus parent ; sous Windows, vous devez
766       utiliser l'option de ligne de commande -k. Pour plus de d&eacute;tails,
767       consulter la page <a href="stopping.html">Arr&ecirc;t et red&eacute;marrage</a>.</p>
768     </section>
769
770     <section id="scriptlog">
771       <title>Journal des scripts</title>
772
773       <p>Afin de faciliter le d&eacute;bogage, la directive
774       <directive module="mod_cgi">ScriptLog</directive> vous permet
775       d'enregistrer les entr&eacute;es et sorties des scripts CGI. Elle ne doit &ecirc;tre
776       utilis&eacute;e que pendant la phase de test, et en aucun cas sur un
777       serveur en production. Vous trouverez plus d'informations dans la
778       documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
779     </section>
780     
781   </section>
782 </manualpage>
783
784
785
786