Page 1 sur 1
API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 16:43
par cyruss
Bonjour,
je suis à la recherche d'une API/fonction me permettant de lire facilement le fichier de log d'Apache "access.log".
Dans l'idéal qq chose qui traduit en fonction de la variable LogFormat définie dans le fichier de conf d'Apache :
LogFormat "%h %l %u %t \"%r\" %>s %b" common
Sinon juste une expression régulière qui va bien.
Merci
++
Cyruss
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 16:48
par Calimero
Hello,
As-tu regardé du côté des fonctions *scanf ? C'est un peu comme des regexp light, et ça ressemble à la syntaxe LogFormat d'ailleurs (devrait fonctionner tel quel ou presque, au pire une modification minimale du pattern).
http://fr2.php.net/manual/fr/function.sscanf.php
http://fr2.php.net/manual/fr/function.fscanf.php
PS: désolé pour le franglais
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 16:57
par cyruss
Salut Calimero,
je m'étais bien évidement tourné vers sscanf() mais cela n'est pas aussi évident. Du coup je me suis demandé si une API existant et faute d'en trouver une valable (il en existe une sur PEAR mais utilisant des fonctions PHP obsolettes) je regarde maintenant du coté des expressions régulières.
++
cyruss
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 17:07
par Calimero
Re cyruss,
je m'étais bien évidement tourné vers sscanf() mais cela n'est pas aussi évident.
C'est à dire ? A quel niveau ça a coincé ?
De mémoire, un motif scanf est un peu plus rigide (notamment sur les caractères d'espacement) qu'une regexp, mais la contrainte du typage de variables étant absente en php le remplacement de tous les motifs par du %s devrait fonctionner pas trop mal...
Du coup je me suis demandé si une API existant et faute d'en trouver une valable (il en existe une sur PEAR mais utilisant des fonctions PHP obsolettes) je regarde maintenant du coté des expressions régulières.
J'imagine que tu vas traiter une grande quantité de lignes, d'où une contrainte de performance assez forte. C'est donc tout bénéfice si tu peux éviter les regexp amha
Est-il possible d'avoir un échantillon de données pour tester ?

Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 17:10
par Dr@ke
Serait une contribution intéressante ça
J'avais cherché à un moment mais sans pousser énormément mes recherches car je n'étais pas sur le serveur adéquat pour tester tout ceci.
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 17:16
par cyruss
Oui finalement j'ai été lire les commentaires sur la fonction sscanf() et qqun propose un code qui fonctionne :
Code : Tout sélectionner
foreach ($fichier_log as $line) {
echo htmlspecialchars($line) . "<br />\n";
$log = array();
$n = sscanf(trim($line), '%s %s %s [%[^]]] "%s %s %[^"]" %d %s "%[^"]" "%[^"]"',
$log['ip'],
$log['client'],
$log['user'],
$log['time'],
$log['method'],
$log['uri'],
$log['prot'],
$log['code'],
$log['bytes'],
$log['ref'],
$log['agent']);
print_r($log);
echo "<br/>";
}
Dans l'idéal j'aurais aimé un bout de code paramétrable mais je vais pas me plaindre, c'est un bon début.
Allez hop je tag en resolu.
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 17:22
par cyruss
Pour information je suis entrain de voir dans quelle mesure en exploitant les fichiers de log d'Apache on peut générer un parcours type.
Ceci dans l'optique d'injecter ensuite ces données dans un outil de WebStress comme Jmeter ou Siege.
++
Re: API pour lire un fichier de type "access.log"
Posté : 01 mars 2010, 17:40
par Dr@ke
tu peux combiner l'utilisation de
CustomLog dans un
htaccess et le fonction
sscanf().
Petit exemple trouvé sur le net:
Code : Tout sélectionner
SetEnvIf Request_URI "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|gz|swf|txt)$" dontlog
SetEnvIf Request_URI "^\/rss\/" dontlog
CustomLog /var/log/apache/access.log combined env=!dontlog
Tu peux aussi créer, je croies car jamais tester personnellement, un
CustomLog fichier log (nom différent).
Genre tu vires tout ce qui est inutile pour ton projet avec le
htaccess que tu enregistres dans un fichier
access.log personnalisé et ensuite tu filtres ce même fichier avec la fonction
sscanf...
Enfin c'est juste une idée
