journal D’accès
le journal d’accès au serveur enregistre toutes les demandes traitées par le serveur. L’emplacement et le contenu du journal d’accès sont contrôlés par la directive CustomLog
. La directiveLogFormat
peut être utilisée pour simplifier la sélection du contenu des journaux. Cette section décrit comment configurer le serveur pour enregistrer des informations dans le journal des accès.
bien sûr, le stockage des informations dans le journal d’accès n’est que le début de la gestion des journaux., L’étape suivante consiste à analyser ces informations pour produire des statistiques utiles. L’analyse des journaux en général dépasse le cadre de ce document et ne fait pas vraiment partie du travail du serveur web lui-même. Pour plus d’informations sur cette rubrique et pour les applications qui effectuent une analyse de journal, consultez le répertoire ouvert.
différentes versions D’Apache httpd ont utilisé d’autres modules et directives pour contrôler la journalisation des accès, notamment mod_log_referer, mod_log_agent et la directiveTransferLog
., La directiveCustomLog
reprend maintenant les fonctionnalités de toutes les anciennes directives.
Le format du journal d’accès est hautement configurable. Le format est spécifié à l’aide d’une chaîne de format qui ressemble beaucoup à une chaîne de format printf(1) de style c. Quelques exemples sont présentés dans les sections suivantes. Pour une liste complète des contenus possibles de la chaîne de format, voir les chaînes de format mod_log_config
.
format de journal commun
une configuration typique du journal d’accès peut se présenter comme suit.,
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/access_log common
cela définit le surnomcommon
et l’associe à une chaîne de format de journal particulière. La chaîne de format se compose de directives pour cent, chacune indiquant au serveur de consigner une information particulière. Les caractères littéraux peuvent également être placés dans la chaîne de format et seront copiés directement dans la sortie du journal. Le caractère de guillemet ("
) doit être échappé en plaçant une barre oblique inverse avant lui pour éviter qu’il ne soit interprété comme la fin de la chaîne de format., La chaîne de format peut également contenir des caractères de contrôle spéciaux « \n
» pour de nouvelle ligne et « \t
» pour l’onglet.
la directiveCustomLog
configure un nouveau fichier journal en utilisant le pseudo défini. Le nom de fichier du journal d’accès est relatif à ServerRoot
, sauf s’il commence par une barre oblique.
la configuration ci-dessus écrira les entrées de journal dans un format connu sous le nom de format de journal commun (CLF). Ce format standard peut être produit par de nombreux serveurs web différents et lu par de nombreux programmes d’analyse de journaux., Les entrées de fichier journal produites dans CLF ressembleront à ceci:
127.0.0.1 - frank "GET /apache_pb.gif HTTP/1.0" 200 2326
chaque partie de cette entrée de journal est décrite ci-dessous.
127.0.0.1
(%h
) C’est l’adresse IP du client (de l’hôte distant) qui en font la demande au serveur. SiHostnameLookups
est réglé surOn
, le serveur va essayer de déterminer le nom d’hôte et l’enregistrer à la place de l’adresse IP. Cependant, cette configuration n’est pas recommandée car elle peut ralentir considérablement le serveur., Au lieu de cela, il est préférable d’utiliser un post-processeur de journal tel quelogresolve
pour déterminer les noms d’hôte. L’adresse IP indiquée ici n’est pas nécessairement l’adresse de la machine sur laquelle se trouve l’utilisateur. Si un serveur proxy existe entre l’utilisateur et le serveur, cette adresse est l’adresse du proxy, plutôt que de l’ordinateur d’origine.-
(%l
) Le « trait d’union » dans la sortie indique que l’information recherchée n’est pas disponible., Dans ce cas, les informations qui ne sont pas disponibles sont L’identité RFC 1413 du client déterminée paridentd
sur la machine du client. Ces informations sont très peu fiables et ne devraient presque jamais être utilisées, sauf sur des réseaux internes étroitement contrôlés. Apache httpd ne tentera même pas de déterminer ces informations à moins queIdentityCheck
ne soit défini surOn
.frank
(%u
) il s’agit de l’ID utilisateur de la personne demandant le document tel que déterminé par l’authentification HTTP., La même valeur est généralement fournie aux scripts CGI dans la variable d’environnementREMOTE_USER
. Si le code d’état de la demande (Voir ci-dessous) est 401, cette valeur ne doit pas être approuvée car l’utilisateur n’est pas encore authentifié. Si le document n’est pas protégé par mot de passe, cette partie sera « -
» tout comme la précédente.(
%t
) Le temps que la demande a été reçue., Le format est:
Il est possible d’afficher l’heure dans un autre format en spécifiant %{format}t
dans la chaîne de format de journalisation, où format
est comme strftime(3)
de la bibliothèque C standard, ou celui de la prise en charge des jetons spéciaux. Pour plus de détails, voir les chaînes de format mod_log_config
.
"GET /apache_pb.gif HTTP/1.0"
(\"%r\"
) La ligne de la requête du client est donné entre guillemets doubles. La ligne de demande contient beaucoup d’informations utiles., Tout d’abord, la méthode utilisée par le client est:GET
. Ensuite, le client a demandé la ressource/apache_pb.gif
, et le troisième, le client a utilisé le protocoleHTTP/1.0
. Il est également possible d’enregistrer une ou plusieurs parties de la ligne de requête indépendamment. Par exemple, la chaîne de format « %m %U%q %H
» enregistre la méthode, le chemin, la chaîne de requête et le protocole, ce qui donne exactement la même sortie que « %r
« .200
(%>s
) C’est le code de statut que le serveur envoie au client., Cette information est très précieuse, car elle indique si la requête a abouti à une réponse positive (codes commençant par 2), une redirection (codes commençant par 3), une erreur provoquée par le client (codes commençant par 4), ou une erreur dans le serveur (codes commençant par 5). La liste complète des codes d’état possibles se trouve dans la spécification HTTP (RFC2616 section 10).2326
(%b
) la dernière partie indique La taille de l’objet retourné au client, y compris les en-têtes de réponse., Si aucun contenu n’a été retourné au client, cette valeur sera « -
« . Pour enregistrer « 0
« pour aucun contenu, utilisez%B
à la place.
format de journal combiné
Une autre chaîne de format couramment utilisée est appelée format de journal combiné. Il peut être utilisé comme suit.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog log/access_log combined
ce format est exactement le même que le format de journal commun, avec l’ajout de deux champs supplémentaires. Chacun des champs supplémentaires utilise la directive percentage %{header}i
, où l’en-tête peut être n’importe quel en-tête de requête HTTP., Le journal d’accès sous ce format ressemblera à:
les champs supplémentaires sont:
"http://www.example.com/start.html"
(\"%{Referer}i\"
) l’en-tête de requête HTTP « Referer » (sic). Cela donne le site à partir duquel le client indique avoir été référé. (Cela devrait être la page qui renvoie ou inclut/apache_pb.gif
)."Mozilla/4.08 (Win98; I ;Nav)"
(\"%{User-agent}i\"
) l’en-tête de requête HTTP de L’agent utilisateur. Il s’agit des informations d’identification que le navigateur client rapporte sur lui-même.,
journaux D’accès multiples
plusieurs journaux d’accès peuvent être créés simplement en spécifiant plusieurs directivesCustomLog
dans le fichier de configuration. Par exemple, les directives suivantes créeront trois journaux d’accès. Le premier contient les informations de base de la NSI, tandis que le deuxième et le troisième contiennent des informations sur le référent et le navigateur. Les deux derniers CustomLog
lignes de montrer comment imiter les effets de la balise ReferLog
et AgentLog
directives.,
cet exemple montre également qu’il n’est pas nécessaire de définir un pseudo avec la directive LogFormat
. Au lieu de cela, le format de journal peut être spécifié directement dans la directive CustomLog
.
Logs conditionnels
Il y a des moments où il est commode d’exclure certaines entrées des logs d’accès basés sur des caractéristiques de la demande de client. Ceci est facilement accompli à l’aide de variables d’environnement. Tout d’abord, une variable d’environnement doit être définie pour indiquer que la demande répond à certaines conditions., Ceci est généralement accompli avec SetEnvIf
. Ensuite, la clauseenv=
de la directiveCustomLog
est utilisée pour inclure ou exclure les requêtes où la variable d’environnement est définie. Quelques exemples:
comme autre exemple, envisagez de consigner les demandes provenant de locuteurs anglophones dans un fichier journal, et les non-anglophones dans un autre fichier journal.
SetEnvIf Accept-Language "en" englishCustomLog logs/english_log common env=englishCustomLog logs/non_english_log common env=!english
Dans un scénario de mise en cache vouloir savoir au sujet de l’efficacité du cache., Une méthode très simple pour trouver ce serait:
SetEnv CACHE_MISS 1LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cacheCustomLog logs/access_log common-cache
mod_cache
avant mod_env
et, en cas de succès, sera diffuser le contenu sans elle. Dans ce cas, un accès au cache du journal -
, tandis qu’un cache miss va se connecter 1
.,
en plus de la syntaxe env=
, LogFormat
prend en charge les valeurs de journalisation conditionnelles au code de réponse HTTP:
LogFormat "%400,501{User-agent}i" browserlogLogFormat "%!200,304,302{Referer}i" refererlog
dans le premier exemple, le User-agent
enregistré si le code d’état HTTP est 400 ou 501. Dans d’autres cas, un « – » littéral sera enregistré à la place. De même, dans le deuxième exemple, le Referer
sera enregistré si le code D’état HTTP n’est pas 200, 204 ou 302. (Note la « ! »avant les codes d’état.,
bien que nous venons de montrer que la journalisation conditionnelle est très puissante et flexible, ce n’est pas le seul moyen de contrôler le contenu des journaux. Les fichiers journaux sont plus utiles lorsqu’ils contiennent un enregistrement complet de l’activité du serveur. Il est souvent plus facile de simplement traiter les fichiers journaux pour supprimer les demandes que vous ne voulez pas prendre en compte.