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