Christophe Le Bot

Pratique de la conception numérique

Trouver un motif dans un fichier de log avec PHP

Rien de plus exhaustif qu’un fichier de logs ! Pourtant, nous les consultons rarement pour la simple et bonne raison qu’ils sont particulièrement indigestes (nous devrions apprendre à lire la matrice…). Bien entendu, il existe un tas d’outils pour analyser et construire une synthèse à partir des données de log. Mais il arrive souvent qu’on ait besoin d’un détail que la synthèse n’apporte pas. Dans ce cas, lecture obligatoire du fichier de log de 157843 lignes… avec un petit script en PHP pour extraire les informations qui nous intéressent. Ouf !

<?php

/* Le fichier de log à analyser */
$fichier = "fichier.log";

/* Le motif à chercher */
$s = "google.fr";

/* Analyse et résultat */
$motif = "/$s/";
$pointeur = fopen($fichier, "r");
$i = 0;
if ($pointeur) {
    while (!feof($pointeur)) {
        $ligne = fgets($pointeur);
        if (preg_match($motif, $ligne, $r)) {
            echo $ligne . '';
            $i++;
        }
    }
    fclose($pointeur);
    echo "Motif '$s' trouvé $i fois.";
}

?>

4 commentaires

Auteur
Seb
Date de publication
12 août 2007 à 11h46

Plus simple en shell :

s=google.fr; grep $s fichier.log | echo Motif $s trouvé `wc -l` fois.

Auteur
Christophe
Date de publication
12 août 2007 à 23h58

Celle-là, je la garde précieusement ! Seulement, elle ne donne que le nombre d’occurences, pas leur contenu. Pour faire encore plus simple et obtenir les lignes du fichier qui comportent le motif, un grep suffit :

grep google.fr fichier.log

PHP aura du mal à faire plus court…


Auteur
Daline
Date de publication
14 janvier 2013 à 20h31

Merci pour ce tutoriel bien expliqué. juste une petite question : est ce que « google.fr » est le bon motif à chercher ? je pose cette question car j’ai lu quelque part qu’on peut crawler sou le nom de google …. Merci d’avance pour votre réponse.


Auteur
Woolyss
Date de publication
8 février 2014 à 20h07

@Daline, le motif « google.fr » est un exemple ici. Oui, il est très simple de crawler et spoofer sous le nom de Google. L’extension User Agent Switcher ou le header dans cURL font ça très bien. Mais, cela n’est pas le propos ici.

Le grep est ce qu’il y a de plus simple pour parser le log.


* Informations obligatoires