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