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