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.";
}

?>

Commentaires

Seb

Plus simple en shell :

s=google.fr; grep $s fichier.log | echo Motif $s trouvé `wc -l` fois.
12 août 2007, 11h46 · Répondre

Christophe

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…

12 août 2007, 23h58 · Répondre

Daline

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.

14 janvier 2013, 20h31 · Répondre

Woolyss

@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.

8 février 2014, 20h07 · Répondre

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *