1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Fichiers journaux - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
12 <script src="./style/scripts/prettify.js" type="text/javascript">
15 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
18 <p class="apache">Serveur Apache HTTP Version 2.5</p>
19 <img alt="" src="./images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Fichiers journaux</h1>
24 <p><span>Langues Disponibles: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="./fr/logs.html" title="Français"> fr </a> |
26 <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
27 <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
28 <a href="./tr/logs.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
31 <p>Pour véritablement gérer un serveur web,
32 il est nécessaire de disposer d'un
33 retour d'informations à propos de l'activité et des performances du
34 serveur, ainsi que de tout problème qui pourrait survenir. Le serveur HTTP
35 Apache propose des fonctionnalités de journalisation souples et très
36 complètes. Ce document décrit comment configurer ces fonctionnalités de
37 journalisation et interpréter le contenu des journaux.</p>
39 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble</a></li>
40 <li><img alt="" src="./images/down.gif" /> <a href="#security">Avertissement à propos de la sécurité</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#errorlog">Journal des erreurs</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#permodule">Journalisation par module</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#accesslog">Journal des accès</a></li>
44 <li><img alt="" src="./images/down.gif" /> <a href="#rotation">Rotation des journaux</a></li>
45 <li><img alt="" src="./images/down.gif" /> <a href="#piped">Journaux redirigés</a></li>
46 <li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Hôtes virtuels</a></li>
47 <li><img alt="" src="./images/down.gif" /> <a href="#other">Autres fichiers journaux</a></li>
48 </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
49 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
51 <h2><a name="overview" id="overview">Vue d'ensemble</a></h2>
54 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td /></tr></table>
57 Le serveur HTTP Apache fournit toute une variété de mécanismes
58 différents pour la journalisation de tout ce qui peut se passer au
59 sein de votre serveur, depuis la requête initiale, en passant par le
60 processus de mise en correspondance des URLs, et jusqu'à la fermeture
61 de la connexion, y compris toute erreur pouvant survenir au cours du
62 traitement. De plus, certains modules tiers fournissent des
63 fonctionnalités de journalisation ou insèrent des entrées dans les
64 fichiers journaux existants, et les applications comme les programmes
65 CGI, les scripts PHP ou autres gestionnaires peuvent envoyer des
66 messages vers le journal des erreurs du serveur.
70 Ce document décrit le fonctionnement des modules de journalisation
71 fournis en standard avec le serveur httpd.
74 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
76 <h2><a name="security" id="security">Avertissement à propos de la sécurité</a></h2>
79 <p>Tout utilisateur qui a les droits en écriture sur le répertoire dans
80 lequel Apache httpd écrit ses journaux pourra quasi
81 certainement avoir accès à l'uid sous lequel le serveur est démarré, en
82 l'occurrence habituellement root. N'accordez <em>PAS</em> aux utilisateurs
83 l'accès en écriture au répertoire dans lequel les journaux sont stockés
84 sans savoir exactement quelles en seraient les conséquences ; voir le
85 document <a href="misc/security_tips.html">conseils sur la sécurité</a>
86 pour plus de détails.</p>
88 <p>En outre, les journaux peuvent contenir des informations fournies
89 directement par un client, sans caractères d'échappement. Des clients mal
90 intentionnés peuvent donc insérer des caractères de contrôle dans les
91 journaux, et il convient par conséquent d'être très prudent lors de la
92 manipulation des journaux bruts.</p>
93 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
95 <h2><a name="errorlog" id="errorlog">Journal des erreurs</a></h2>
98 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table>
100 <p>Le journal des erreurs du serveur, dont le nom et la localisation sont
101 définis par la directive <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>,
102 est le journal le plus important. C'est dans celui-ci
103 que le démon Apache httpd va envoyer les informations de diagnostic et
104 enregistrer toutes les erreurs qui surviennent lors du traitement des
105 requêtes. Lorsqu'un problème survient au démarrage du serveur ou pendant
106 son fonctionnement, la première chose à faire est de regarder dans ce
107 journal, car il vous renseignera souvent sur le problème rencontré et
108 la manière d'y remédier.</p>
110 <p>Le journal des erreurs est habituellement enregistré dans un fichier
111 (en général <code>error_log</code> sur les systèmes de type Unix et
112 <code>error.log</code> sur Windows et OS/2). Sur les systèmes de type Unix,
113 le serveur peut aussi enregistrer ses erreurs dans
114 <code>syslog</code> ou les
115 <a href="#piped">rediriger vers un programme</a> par l'intermédiaire d'un
116 tube de communication (pipe).</p>
118 <p>Le format par défaut du journal des erreurs est descriptif et de forme
119 relativement libre. Certaines informations apparaissent cependant dans la
120 plupart des entrées du journal. Voici un message typique
121 à titre d'exemple : </p>
123 <div class="example"><p><code>
124 [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
125 client denied by server configuration:
126 /export/home/live/ap/htdocs/test
129 <p>Le premier champ de l'entrée du journal est la date et l'heure du
130 message. Le second champ indique la sévérité de l'erreur rapportée. La
131 directive <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> permet de
132 restreindre le type des erreurs qui doivent être enregistrées
133 dans le journal des erreurs en définissant leur niveau de sévérité. Le
134 troisième champ contient l'adresse IP du client qui a généré l'erreur.
135 Vient ensuite le message proprement dit, qui indique dans ce cas que le
136 serveur a été configuré pour interdire l'accès au client. Le serveur
137 indique le chemin système du document requis (et non
140 <p>Une grande variété de messages différents peuvent apparaître dans le
141 journal des erreurs. La plupart d'entre eux sont similaires à l'exemple
142 ci-dessus. Le journal des erreurs peut aussi contenir des informations de
143 débogage en provenance de scripts CGI. Toute information qu'un script CGI
144 écrit sur la sortie d'erreurs standard <code>stderr</code> sera recopiée
145 telle quelle dans le journal des erreurs.</p>
147 <p>La directive <code class="directive"><a href="./mod/core.html#errorlogformat">ErrorLogFormat</a></code>
148 vous permet de personnaliser le format du journal des erreurs, et de
149 définir les informations à journaliser. Si
150 <code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code> est présent, vous pouvez utiliser le
151 drapeau <code>%L</code> à la fois dans le journal des erreurs et
153 journal des accès, ce qui aura pour effet de générer un identifiant
154 d'entrée qui vous permettra de corréler les entrées du journal des
155 erreurs avec celles du journal des accès.</p>
157 <p>Pendant la phase de test, il est souvent utile de visualiser en continu
158 le journal des erreurs afin de détecter tout problème éventuel. Sur les
159 systèmes de type Unix, ceci s'effectue à l'aide de la commande :</p>
161 <div class="example"><p><code>
164 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
165 <div class="section">
166 <h2><a name="permodule" id="permodule">Journalisation par module</a></h2>
169 <p>La directive <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> permet
170 de spécifier un niveau de sévérité de journalisation pour chaque
171 module. Vous pouvez ainsi résoudre un problème propre à un module particulier
172 en augmentant son volume de journalisation sans augmenter ce volume
173 pour les autres modules. Ceci est particulièrement utile lorsque
174 vous voulez obtenir des détails sur le fonctionnement de modules
175 comme <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> ou <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
177 <p>Pour ce faire, vous devez spécifier le nom du module dans votre
178 directive <code class="directive">LogLevel</code> :</p>
180 <pre class="prettyprint lang-config">
181 LogLevel info rewrite:trace5
185 <p>Dans cet exemple, le niveau de journalisation général est défini
186 à info, et à <code>trace5</code> pour <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
188 <div class="note">Cette directive remplace les directives de journalisation par
189 module des versions précédentes du serveur, comme
190 <code>RewriteLog</code>.</div>
191 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
192 <div class="section">
193 <h2><a name="accesslog" id="accesslog">Journal des accès</a></h2>
196 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table>
198 <p>Le journal des accès au serveur
199 enregistre toutes les requêtes que traite
200 ce dernier. La localisation et le contenu du journal des accès sont définis
201 par la directive <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>.
202 La directive <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
203 permet de simplifier la sélection du contenu du journal. Cette section
204 décrit comment configurer le serveur pour l'enregistrement des informations
205 dans le journal des accès.</p>
207 <p>Bien évidemment, le stockage d'informations dans le journal des accès
208 n'est que le point de départ de la gestion de la journalisation. L'étape
209 suivante consiste à analyser ces informations de façon à pouvoir en
210 extraire des statistiques utiles. L'analyse de journaux en général est en
211 dehors du sujet de ce document et ne fait pas vraiment partie intégrante
212 du travail du serveur web lui-même. Pour plus d'informations à propos de ce
213 sujet et des applications dédiées à l'analyse de journaux, vous pouvez vous
214 référer à <a href="http://dmoz.org/Computers/Software/Internet/ Site_Management/Log_analysis/">Open Directory</a> ou
215 <a href="http://dir.yahoo.com/Computers_and_Internet/Software/ Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>.</p>
217 <p>Différentes versions du démon Apache httpd utilisaient d'autres modules
218 et directives pour contrôler la journalisation des accès, à l'instar de
219 mod_log_referer, mod_log_agent, et de la directive
220 <code>TransferLog</code>. La directive
221 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> rassemble
222 désormais les fonctionnalités de toutes les anciennes directives.</p>
224 <p>Le format du journal des accès est hautement configurable. Il est
225 défini à l'aide d'une chaîne de format qui ressemble sensiblement à la
226 chaîne de format de style langage C de printf(1). Vous trouverez quelques
227 exemples dans les sections suivantes. Pour une liste exhaustive de ce que
228 peut contenir une chaîne de format, vous pouvez vous référer au chapitre
229 <a href="mod/mod_log_config.html#formats">chaînes de format</a> de la
230 documentation du module <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.</p>
232 <h3><a name="common" id="common">Format habituel du journal</a></h3>
235 <p>Voici une configuration typique pour le journal des accès :</p>
237 <pre class="prettyprint lang-config">
238 LogFormat "%h %l %u %t \"%r\" %>s %b" common
239 CustomLog logs/access_log common
243 <p>Ici est définie l'<em>identité</em> <code>common</code> qui est
244 ensuite associée à une chaîne de format de journalisation particulière.
245 La chaîne de format est constituée de directives débutant par le
246 caractère %, chacune d'entre elles indiquant au serveur d'enregistrer
247 un élément particulier d'information. Des caractères littéraux peuvent
248 aussi être insérés dans la chaîne de format ; il seront copiés tels
249 quels dans le flux de sortie destiné à la journalisation.
250 Les guillemets (<code>"</code>) doivent être échappées en les faisant
251 précéder d'un anti-slash (<code>\</code>) afin qu'elles ne soient pas
252 interprétées comme la fin de la chaîne de format. La chaîne de format
253 peut aussi contenir les caractères de contrôle spéciaux
254 "<code>\n</code>" et "<code>\t</code>" pour insérer respectivement
255 un passage à la ligne et une tabulation.</p>
257 <p>La directive <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
258 définit un nouveau fichier journal en l'associant à l'identité
259 précédemment définie. Le chemin du nom de fichier associé au journal
260 des accès est relatif au chemin défini par la directive
261 <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>, sauf s'il
262 débute par un slash.</p>
264 <p>La configuration ci-dessus va enregistrer les entrées de
265 journalisation selon un format connu sous le nom de
266 Common Log Format (CLF) pour "Format de journalisation standard".
267 Ce format standard peut être produit par de nombreux serveurs web
268 différents et lu par de nombreux programmes d'analyse de journaux.
269 Les entrées de fichier journal générées selon le format CLF
270 ressemblent à ceci :</p>
272 <div class="example"><p><code>
273 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
274 /apache_pb.gif HTTP/1.0" 200 2326
277 <p>Chaque partie de cette entrée de journal est décrite
278 dans ce qui suit.</p>
281 <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
283 <dd>Il s'agit de l'adresse IP du client (l'hôte distant) qui a envoyé
284 la requête au serveur. Si la directive
285 <code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code> est positionnée à
286 <code>On</code>, le serveur va essayer de déterminer le nom de l'hôte
287 et de l'enregistrer à la place de l'adresse IP. Cette configuration
288 n'est cependant pas recommandée car elle peut ralentir le serveur de
289 manière significative. Il est par conséquent préférable d'utiliser un
290 processeur d'analyse de journaux a posteriori
291 tel que <code class="program"><a href="./programs/logresolve.html">logresolve</a></code>
292 pour déterminer les noms d'hôte. L'adresse IP indiquée ici n'est pas
293 nécessairement l'adresse IP de la machine devant laquelle se trouve
294 l'utilisateur. Si un serveur mandataire s'intercale entre le serveur
295 et l'utilisateur, l'adresse indiquée sera celle du mandataire et non
296 celle de la machine à l'origine de la requête.</dd>
298 <dt><code>-</code> (<code>%l</code>)</dt>
300 <dd>Le "trait d'union" indique que la portion d'information
301 correspondante n'est pas disponible. Dans le cas présent, l'information
302 non disponible est l'identité (RFC 1413) du client telle que déterminée
303 par <code>identd</code> sur la machine cliente. Cette information est
304 très peu fiable et ne devrait jamais être utilisée, sauf dans le cas
305 de réseaux internes étroitement contrôlés. Le démon httpd ne cherchera
306 d'ailleurs à obtenir cette information que si la directive
307 <code class="directive"><a href="./mod/mod_ident.html#identitycheck">IdentityCheck</a></code> est positionnée
308 à <code>On</code>.</dd>
310 <dt><code>frank</code> (<code>%u</code>)</dt>
312 <dd>Il s'agit de l'identifiant utilisateur de la personne qui a
313 demandé le document, issu d'une authentification HTTP.
314 Ce même identifiant est en général fourni aux scripts CGI par
315 l'intermédiaire de la valeur de la variable d'environnement
316 <code>REMOTE_USER</code>. Si le statut de la requête (voir plus loin)
317 est 401, cette identifiant n'est pas fiable car l'utilisateur n'est
318 pas encore authentifié. Si le document n'est pas protégé par
319 mot de passe, cette partie d'information sera représentée par
320 "<code>-</code>", comme la partie précédente.</dd>
322 <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
323 (<code>%t</code>)</dt>
326 L'heure à laquelle la requête a été reçue.
327 Le format est le suivant :
330 <code>[jour/mois/année:heure:minutes:secondes zone]<br />
331 jour = 2*chiffre<br />
332 mois = 3*lettre<br />
333 année = 4*chiffre<br />
334 heure = 2*chiffre<br />
335 minutes = 2*chiffre<br />
336 secondes = 2*chiffre<br />
337 zone = (`+' | `-') 4*chiffre</code>
338 </p>Il est possible de modifier le format d'affichage de l'heure
339 en spécifiant <code>%{format}t</code> dans la chaîne de format du
340 journal, où <code>format</code> est une chaîne de format
341 de la forme de celle de la fonction <code>strftime(3)</code>
342 de la bibliothèque C standard, ou choisie parmi les
343 formats spéciaux supportés. Pour plus de détails,
344 reportez-vous aux. <a href="mod/mod_log_config.html#formats">chaînes de format</a>
345 de <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.
348 <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
349 (<code>\"%r\"</code>)</dt>
351 <dd>La ligne de la requête du client est placée entre guillemets.
352 Elle contient de nombreuses informations utiles. Tout d'abord, la
353 méthode utilisée par le client est <code>GET</code>. Ensuite, le
354 client a demandé la ressource <code>/apache_pb.gif</code>, et enfin,
355 le client a utilisé le protocole <code>HTTP/1.0</code>. Il est aussi
356 possible d'enregistrer séparément une ou plusieurs parties de la
357 requête. Par exemple, la chaîne de format "<code>%m %U %q %H</code>"
358 va enregistrer la méthode, le chemin, la chaîne de la requête et le
359 protocole, ce qui donnera le même résultat que
360 "<code>%r</code>".</dd>
362 <dt><code>200</code> (<code>%>s</code>)</dt>
364 <dd>C'est le code de statut que le serveur retourne au client. Cette
365 information est très importante car elle indique si la requête a fait
366 l'objet d'une réponse positive (codes commençant par 2), une
367 redirection (codes commençant par 3), une erreur due au client (codes
368 commençant par 4), ou une erreur due au serveur (codes commençant
369 par 5). Vous trouverez la liste complète des codes de statut possibles
370 dans la <a href="http://www.w3.org/Protocols/rfc2616/ rfc2616.txt">specification HTTP</a> (RFC2616 section 10).</dd>
372 <dt><code>2326</code> (<code>%b</code>)</dt>
374 <dd>La dernière partie indique la taille de l'objet retourné au client,
375 en-têtes non compris. Si aucun contenu n'a été retourné au client, cette
376 partie contiendra "<code>-</code>". Pour indiquer l'absence de contenu
377 par "<code>0</code>", utilisez <code>%B</code> au lieu de
378 <code>%b</code>.</dd>
382 <h3><a name="combined" id="combined">Combined Log Format (Format de journalisation combiné)</a></h3>
385 <p>Une autre chaîne de format couramment utilisée est le
386 "Combined Log Format" (Format de journalisation combiné). Il s'utilise
389 <pre class="prettyprint lang-config">
390 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
391 CustomLog log/access_log combined
395 <p>Ce format est identique au Common Log Format, avec deux champs
396 supplémentaires. Chacun de ces deux champs utilise la directive
397 commençant par le caractère "%" <code>%{<em>header</em>}i</code>,
398 où <em>header</em> peut être n'importe quel en-tête de requête HTTP.
399 Avec ce format, le journal des accès se présentera comme suit :</p>
401 <div class="example"><p><code>
402 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
403 /apache_pb.gif HTTP/1.0" 200 2326
404 "http://www.example.com/start.html" "Mozilla/4.08 [en]
408 <p>Les champs supplémentaires sont :</p>
411 <dt><code>"http://www.example.com/start.html"</code>
412 (<code>\"%{Referer}i\"</code>)</dt>
414 <dd>L'en-tête "Referer" (sic) de la requête HTTP. Il indique le site
415 depuis lequel le client prétend avoir lancé sa requête. (Ce doit être
416 la page qui contient un lien vers <code>/apache_pb.gif</code> ou
417 inclut ce dernier fichier).</dd>
419 <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
420 (<code>\"%{User-agent}i\"</code>)</dt>
422 <dd>L'en-tête User-Agent de la requête HTTP. C'est une information
423 d'identification que le navigateur du client envoie à propos
428 <h3><a name="multiple" id="multiple">Journaux d'accès multiples</a></h3>
431 <p>Plusieurs journaux d'accès peuvent être créés en spécifiant tout
432 simplement plusieurs directives
433 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> dans le
434 fichier de configuration. Par exemple, les directives suivantes vont
435 créer trois journaux d'accès. Le premier contiendra les informations
436 de base CLF, le second les informations du Referer, et le troisième
437 les informations sur le navigateur. Les deux dernières directives
438 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> montrent
439 comment simuler les effets des directives <code>ReferLog</code> et
440 <code>AgentLog</code>.</p>
442 <pre class="prettyprint lang-config">
443 LogFormat "%h %l %u %t \"%r\" %>s %b" common
444 CustomLog logs/access_log common
445 CustomLog logs/referer_log "%{Referer}i -> %U"
446 CustomLog logs/agent_log "%{User-agent}i"
450 <p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
451 une chaîne de format à un alias au moyen de la directive
452 <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>. Elle peut
453 être définie directement dans la ligne de la directive
454 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>.</p>
457 <h3><a name="conditional" id="conditional">Journalisation conditionnelle</a></h3>
460 <p>Il est parfois souhaitable d'exclure certaines entrées des journaux
461 d'accès en fonction des caractéristiques de la requête du client. On
462 peut aisément accomplir ceci à l'aide des
463 <a href="env.html">variables d'environnement</a>. Tout d'abord, une
464 variable d'environnement doit être définie pour indiquer que la
465 requête remplit certaines conditions. Pour ceci, on utilise en général
466 la directive <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>,
467 puis la clause <code>env=</code> de la directive
468 <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> pour inclure
469 ou exclure les requêtes pour lesquelles
470 la variable d'environnement est définie.
471 Quelques exemples :</p>
473 <pre class="prettyprint lang-config">
474 # Marque les requêtes en provenance de l'interface loop-back
475 SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
476 # Marque les requêtes pour le fichier robots.txt
477 SetEnvIf Request_URI "^/robots\.txt$" dontlog
478 # Journalise toutes les autres requêtes
479 CustomLog logs/access_log common env=!dontlog
483 <p>Autre exemple, imaginons l'enregistrement des requêtes en provenance
484 d'utilisateurs de langue anglaise dans un journal, et celles des autres
485 utilisateurs dans un autre journal.</p>
487 <pre class="prettyprint lang-config">
488 SetEnvIf Accept-Language "en" english<br />
489 CustomLog logs/english_log common env=english<br />
490 CustomLog logs/non_english_log common env=!english
494 <p>Dans le contexte d'une mise en cache, il peut être
495 intéressant de connaître l'efficacité du cache. Pour y parvenir,
496 on pourrait utiliser cette méthode simple :</p>
498 <pre class="prettyprint lang-config">
500 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
501 CustomLog logs/access_log common-cache
505 <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va s'exécuter avant
506 <code class="module"><a href="./mod/mod_env.html">mod_env</a></code>, et si son action est couronnée de
507 succès, il délivrera le contenu sans faire appel à ce dernier. Si
508 l'URL se trouve dans le cache, la valeur journalisée sera alors
509 <code>-</code>, tandis que dans le cas contraire elle sera
512 <p>En plus de la syntaxe <code>env=</code>, la directive <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> supporte les
513 valeurs de journalisation conditionnelles basées sur le code de la
516 <pre class="prettyprint lang-config">
517 LogFormat "%400,501{User-agent}i" browserlog
518 LogFormat "%!200,304,302{Referer}i" refererlog
522 <p>Dans le premier exemple, le <code>User-agent</code> sera
523 enregistré si le code d'état HTTP est 400 ou 501. Dans le cas
524 contraire, c'est un caractère "-" qui sera enregistré à la place.
525 Dans le second exemple, le <code>Referer</code> sera enregistré si
526 le code d'état HTTP n'est <strong>pas</strong> 200, 204, ou 302
527 (remarquez le caractère "!" avant les codes d'état).</p>
529 <p>Bien que nous venions de montrer que la journalisation conditionnelle
530 est souple et très puissante, cette méthode de contrôle du contenu des
531 journaux n'est pas la seule. Les fichiers journaux sont plus utiles
532 quand ils contiennent un enregistrement complet de l'activité du serveur,
533 et il est souvent plus aisé de simplement traiter à posteriori les fichiers
534 journaux pour supprimer les requêtes que vous ne voulez pas y voir
537 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
538 <div class="section">
539 <h2><a name="rotation" id="rotation">Rotation des journaux</a></h2>
542 <p>Même dans le cas d'un serveur modérément sollicité, la quantité
543 d'informations stockées dans les fichiers journaux est très importante.
544 Le fichier journal des accès grossit en général d'1 Mo ou plus toutes
545 les 10000 requêtes. Il est par conséquent nécessaire d'effectuer
546 périodiquement la rotation des journaux en déplaçant ou supprimant les
547 fichiers correspondants. On ne peut pas le faire pendant que le serveur
548 est en cours d'exécution, car Apache httpd va continuer à écrire dans l'ancien
549 fichier journal aussi longtemps qu'il le maintiendra ouvert.
550 C'est pourquoi le serveur doit être
551 <a href="stopping.html">redémarré</a> après le déplacement ou la
552 suppression des fichiers journaux de façon à ce qu'il en ouvre
555 <p>Avec un redémarrage <em>graceful</em>, on peut faire en sorte que le
556 serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
557 existantes ou en cours avec les clients. Cependant, pour que ceci soit
558 possible, le serveur doit continuer à écrire dans les anciens fichiers
559 journaux pendant qu'il termine le traitement des requêtes en cours.
560 Il est donc nécessaire d'attendre un certain temps après le rédémarrage
561 avant d'effectuer tout traitement sur les fichiers journaux. Voici un
562 scénario typique dans lequel on effectue une simple rotation des
563 journaux en compressant les anciens fichiers correspondants afin
564 de gagner de l'espace disque :</p>
566 <div class="example"><p><code>
567 mv access_log access_log.old<br />
568 mv error_log error_log.old<br />
569 apachectl graceful<br />
571 gzip access_log.old error_log.old
574 <p>La section suivante présente une autre méthode de rotation des journaux
575 qui consiste à utiliser les
576 <a href="#piped">journaux redirigés</a>.</p>
577 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
578 <div class="section">
579 <h2><a name="piped" id="piped">Journaux redirigés</a></h2>
582 <p>Nous avons vu que le démon httpd écrivait les informations de
583 journalisation des erreurs et des accès dans un fichier journal ;
585 rediriger ces informations vers un autre processus par l'intermédiaire d'un
586 tube de communication (pipe). Cette fonctionnalité améliore
587 considérablement la souplesse de la journalisation, sans ajouter de code
588 au serveur principal. Pour rediriger les informations de journalisation
589 vers un tube de communication, remplacez simplement le nom de fichier
591 le caractère pipe "<code>|</code>", suivi du nom de l'exécutable qui va
592 recueillir les entrées de journal sur son entrée
593 standard. Le serveur va
594 lancer le processus de redirection des journaux au moment du démarrage du
595 serveur, et le relancera s'il cesse de fonctionner
596 pendant l'exécution du serveur.
597 (Nous dénommons cette technique "journalisation
598 redirigée fiable" grâce à cette dernière fonctionnalité.)</p>
600 <p>Les processus de journalisation redirigée sont lancés par le processus
601 httpd parent, et héritent de l'UID de ce dernier. Cela signifie que les
602 programmes de journalisation dirigée s'exécutent généralement en tant que
603 root. Il est donc très important que ces programmes soient simples et
606 <p>Un des grands avantages de la journalisation redirigée est la possibilité
607 d'effectuer la rotation des journaux sans avoir à redémarrer le serveur. Pour
608 accomplir cette tâche, le serveur HTTP Apache fournit un programme simple
609 appelé <code class="program"><a href="./programs/rotatelogs.html">rotatelogs</a></code>. Par exemple, pour une rotation des
610 journaux toutes les 24 heures, ajoutez ces lignes :</p>
612 <pre class="prettyprint lang-config">
613 CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
617 <p>Notez que l'ensemble de la commande qui sera appelée par le tube de
618 communication a été placée entre guillemets. Bien que cet exemple
619 concerne le journal des accès, la même technique peut être utilisée
620 pour le journal des erreurs.</p>
622 <p>Il existe un autre programme de rotation des journaux similaire mais
623 beaucoup plus souple : il s'agit de "cronolog", non fourni par Apache,
624 mais disponible <a href="http://www.cronolog.org/">ici</a>.</p>
626 <p>Comme la journalisation conditionnelle, la journalisation redirigée est
627 un outil très puissant, mais si elle existe, il est préférable d'utiliser
628 une solution plus simple comme le traitement à posteriori hors ligne.</p>
631 <p>Par défaut, le processus de redirection du journal est lancé sans
632 invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
633 au lieu de "<code>|</code>" (en général avec <code>/bin/sh -c</code>)
636 <pre class="prettyprint lang-config">
637 # Invocation de "rotatelogs" en utilisant un shell
638 CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
643 <p>Il s'agissait du comportement par défaut sous Apache 2.2. Selon
644 les spécificités du shell, ceci peut générer un processus shell
645 supplémentaire pour toute la durée du programme de redirection du
646 journal, et induire des problèmes de gestion de signaux au cours du
647 redémarrage. La notation "<code>||</code>" est aussi supportée pour
648 des raisons de compatibilité avec Apache 2.2 et est équivalente à
649 "<code>|</code>".</p>
650 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
651 <div class="section">
652 <h2><a name="virtualhost" id="virtualhost">Hôtes virtuels</a></h2>
655 <p>Lorsqu'un serveur possède plusieurs <a href="vhosts/">hôtes virtuels</a>, il existe de nombreuses solutions pour gérer
656 les fichiers journaux. Par exemple, on peut utiliser les journaux comme
657 s'il s'agissait d'un serveur avec un seul hôte. Il suffit pour cela de
658 placer les directives de journalisation en dehors des sections
659 <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code> au niveau
660 du serveur principal, ce qui a pour effet de journaliser toutes les
661 requêtes dans le même journal des accès et des erreurs. Cette technique
662 est cependant inappropriée pour recueillir des statistiques sur chaque
663 hôte virtuel individuellement.</p>
665 <p>Si des directives <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ou
666 <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> sont placées dans une section
667 <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code>, toutes les
668 requêtes ou erreurs pour cet hôte virtuel ne seront enregistrées que dans
669 le fichier spécifié. Tout hôte virtuel qui ne possède pas de directives de
670 journalisation verra ses requêtes enregistrées dans le journal du serveur
671 principal. Cette technique est appropriée pour un petit nombre d'hôtes
672 virtuels, mais si ce nombre est important, elle peut devenir compliquée à
673 gérer. En outre, des problèmes de <a href="vhosts/fd-limits.html">nombre de descripteurs
674 de fichiers insuffisant</a> peuvent rapidement apparaître.</p>
676 <p>Il existe un très bon compromis pour le journal des accès. En intégrant
677 les informations à propos de l'hôte virtuel à la chaîne de format du
678 journal, il est possible de journaliser tous les hôtes dans le même
679 journal, puis de séparer ultérieurement le journal en plusieurs journaux
680 individuels. Considérons par exemple les directives suivantes :</p>
682 <pre class="prettyprint lang-config">
683 LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
684 CustomLog logs/access_log comonvhost
688 <p>Le champ <code>%v</code> sert à enregistrer le nom de l'hôte virtuel qui
689 traite la requête. Un programme tel que <a href="programs/other.html">split-logfile</a> peut ensuite être utilisé
690 pour générer "à froid" autant de journaux que d'hôtes virtuels.</p>
691 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
692 <div class="section">
693 <h2><a name="other" id="other">Autres fichiers journaux</a></h2>
696 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#bufferedlogs">BufferedLogs</a></code></li><li><code class="directive"><a href="./mod/mod_log_forensic.html#forensiclog">ForensicLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
698 <h3>Enregistrement du nombre réel d'octets envoyés et reçus</h3>
701 <p>Le module <code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code> fournit deux champs
702 <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> supplémentaires
703 (%I et %O) qui permettent d'enregistrer le nombre réel d'octets reçus et
704 envoyés sur le réseau.</p>
707 <h3>Journalisation de style investigation judiciaire (forensic logging)</h3>
710 <p>Le module <code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code> permet la journalisation
711 à des fins d'investigation judiciaire des requêtes des clients. La
712 journalisation est effectuée avant et après le traitement de la requête,
713 qui fait donc l'objet de deux entrées dans le journal. Le générateur de
714 journaux d'investigation est très strict et ne permet aucune
715 personnalisation. C'est un inestimable outil de débogage et de sécurité.</p>
718 <h3><a name="pidfile" id="pidfile">Fichier PID</a></h3>
721 <p>Au démarrage, le démon httpd Apache enregistre l'identifiant du
722 processus httpd parent dans le fichier <code>logs/httpd.pid</code>.
723 Le nom de ce fichier peut être modifié à l'aide de la directive
724 <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. Cet identifiant
725 permet à l'administrateur de redémarrer et arrêter le démon en
726 envoyant des signaux au processus parent ; sous Windows, vous devez
727 utiliser l'option de ligne de commande -k. Pour plus de détails,
728 consulter la page <a href="stopping.html">Arrêt et redémarrage</a>.</p>
731 <h3><a name="scriptlog" id="scriptlog">Journal des scripts</a></h3>
734 <p>Afin de faciliter le débogage, la directive
735 <code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> vous permet
736 d'enregistrer les entrées et sorties des scripts CGI. Elle ne doit être
737 utilisée que pendant la phase de test, et en aucun cas sur un
738 serveur en production. Vous trouverez plus d'informations dans la
739 documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
742 <h3><a name="rewritelog" id="rewritelog">Journal de réécriture</a></h3>
745 <p>Lorsqu'on utilise les fonctionnalités puissantes et complexes du
746 module <a href="mod/mod_rewrite.html">mod_rewrite</a>, il est presque
747 toujours nécessaire d'utiliser la directive
748 <code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code> afin de
749 faciliter le débogage. Ce fichier journal fournit une analyse détaillée
750 de la transformation des requêtes par le moteur de réécriture. Le niveau
751 de détail est contrôlé par la directive
752 <code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code>.</p>
755 <div class="bottomlang">
756 <p><span>Langues Disponibles: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> |
757 <a href="./fr/logs.html" title="Français"> fr </a> |
758 <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
759 <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
760 <a href="./tr/logs.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
761 </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
762 <script type="text/javascript"><!--//--><![CDATA[//><!--
763 var comments_shortname = 'httpd';
764 var comments_identifier = 'http://httpd.apache.org/docs/trunk/logs.html';
766 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
767 d.write('<div id="comments_thread"><\/div>');
768 var s = d.createElement('script');
769 s.type = 'text/javascript';
771 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
772 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
775 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
777 })(window, document);
778 //--><!]]></script></div><div id="footer">
779 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
780 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
781 if (typeof(prettyPrint) !== 'undefined') {