SPIP et les logs

Les fichiers logs (journaux d’événements) permettent de notifier le webmaster de certains événements du site, plus ou moins importants. L’outil « SPIP et les logs » vous aidera à les consulter et à mieux piloter la façon dont ils sont construits. Découvrez également l’outil « Profiling » qui vous aidera à optimiser vos boucles et requêtes SQL

Installation

L’outil décrit ici est une fonctionnalité du plugin « Le Couteau Suisse » que vous pouvez trouver ici : Le Couteau Suisse.

Pour avoir accès aux différents réglages décrits dans cet article, il vous faut donc avoir préalablement installé ce plugin en suivant la procédure normale d’installation des plugins SPIP.

Ensuite, veuillez activer l’outil « SPIP et les logs » en vous rendant sur la page d’administration du plugin en espace privé (Bouton Configuration, puis "Le Couteau Suisse"). Cet outil (que l’on appelle aussi « lame ») est présent dans la catégorie « Développement ».

Présentation de l’outil « SPIP et les logs »

Voici une idée visuelle de l’outil :

Comme vous pouvez le voir, une première partie « Action rapide » liste les fichiers log trouvés sur votre site. En plus petit, figure la date de dernière modification qui vous renseigne sur l’état de vétusté des informations conservées.

L’outil sélectionne automatiquement les fichiers trop vieux (plus de 28 jours), vous permettant de vous en débarrasser en un clic...

En cliquant sur chacun des liens (que l’on voit en bleu sur cet exemple) vous accéderez au fichier en question. Voici comment cette page peut se présenter :

Voici les différentes colonnes disponibles :

-  Date : date de création de l’événement enregistré
-  IP : adresse IP de l’ordinateur ou du serveur ayant généré l’événement
-  PID : numéro de processus sur le serveur. La valeur « 1 » correspond au serveur
-  Espace privé :« Oui » indique que l’événement a été inséré lors de traitements effectuées dans l’interface privé. « Non » indique que l’événement a été inséré lors d’une consultation publique du site
-  Gravité : niveau de gravité de l’événement
-  Message : Description de l’événement, simple ou complet suivant le paramétrage ci-dessus

Un bouton d’actualisation de cette page est présente en sous-titre, avec la liste éventuelle de toutes les parties du fichier consulté (en .log.1, .log.2, etc.)

La fonction spip_log()

SPIP dispose d’une fonction PHP « spip_log() » pour écrire des informations de log. Très pratique pendant les phases de débogage.

Cette fonction prend 1 ou 2 arguments. Un seul, elle écrira dans le fichier spip.log. Le second argument peut avoir 2 actions :
-  écrire dans un fichier séparé et aussi dans spip.log en donnant un nom de fichier (sans extension),
-  indiquer un niveau de gravité, tel que _LOG_INFO
-  combiner les 2 actions, en concaténant au nom de fichier (éventuellement suivi d’un point) le niveau de log.

Exemples :

<?php
spip_log($tableau);
spip_log($tableau, 'monlog');
spip_log($tableau, _LOG_ERREUR);
spip_log($tableau, 'monlog.' . _LOG_AVERTISSEMENT);
spip_log("Ajout de $valeur dans $tableau","monlog");
?>

Lorsqu’un tableau est transmis à la fonction de log, SPIP écrira le résultat d’une print_r() dans le fichier de log.
Pour chaque fichiers demandé, ici spip (par défaut) et monlog, SPIP créera ou ajoutera le contenu du premier argument, mais pas n’importe où. Si le script est dans l’interface privée, il écrira dans « prive_spip.log » ou « prive_monlog.log », sinon dans « spip.log » ou « monlog.log ».

Paramétrages

-  Rotation des fichiers
La rotation des logs permet de limiter la taille de ces fichiers. SPIP peut les scinder en plusieurs parties qu’il nommera par exemple, respectivement du plus récent au plus ancien : spip.log, spip.log.1, spip.log.2, spip.log.3, etc.
Le nombre d’événements stockés étant donc limité, les plus anciens sont supprimés dès que la taille ou le nombre des parties excède la limite prévue par la configuration.
-  Dossier où sont stockés les logs
Par défaut, le dossier sous SPIP 3 est : /tmp/log/. C’est dans ce dossier que l’outil va chercher et lister tous les logs disponibles.
-  Fichier par défaut
La fonction de mise en log de SPIP comporte un paramètre de rangement optionnel, permettant de choisir un fichier de log précis. Si ce paramètre n’est pas précisé, alors l’information sera stockée dans un fichier par défaut dont vous pouvez choisir le nom. par défaut celui-ci est : spip.log.
-  Extension
L’extension habituelle du fichier est .log. Mais vous pouvez éventuellement la modifier à votre guise, par exemple : .log.txt.
-  Pour chaque hit : nombre d’accès maximal par fichier
Ce paramètre est une sécurité en cas d’un très grand nombre de requêtes. SPIP permet d’en limiter le nombre afin de ne pas surcharger le serveur ou d’allonger le temps de chargement des pages. Bien sûr, il est possible que certains événements ne soient pas consignés si la limite est dépassée, mais après tout, il suffit de régler les problèmes et tout devrait rentrer dans l’ordre...
-  Informations supplémentaires de débogage
SPIP ajoute à la description 3 informations supplémentaires : le fichier cherchant à consigner un événement, le numéro de ligne de code où ça se produit et la fonction dans laquelle on se trouve. Exemple :
plugins/auto/cache_cool/v0.4.1/cache_cool_options.php:L16:include_once()
starting ob

-  Données écrites en format brut (non HTML)
Ceci évite toute transformation du texte en vue d’un affichage HTML. Si cette option est décochée alors certains caractères seront remplacés par leur entité HTML. Exemple : « < » remplacé par « &lt; »

Le filtre de gravité

Le filtre de gravité de SPIP permet de sélectionner le niveau d’importance maximal à prendre en compte avant la mise en logs d’une donnée. Un niveau 8 permet par exemple de stocker tous les messages émis par SPIP. Le niveau par défaut est le niveau 5.

Les différentes valeurs de ce filtre sont (du moins verbeux au plus
verbeux) :

-  0 (_LOG_HS) : Système inutilisable
-  1 (_LOG_ALERTE_ROUGE) : Une intervention immédiate est nécessaire
-  2 (_LOG_CRITIQUE) : Erreur critique pour le système
-  3 (_LOG_ERREUR) : Erreur de fonctionnement
-  4 (_LOG_AVERTISSEMENT) : Avertissement
-  5 (_LOG_INFO_IMPORTANTE) : Événement normal méritant d’être signalé
-  6 (_LOG_INFO) : Pour information seulement
-  7 (_LOG_DEBUG) : Message de mise au point

Attention, il y a donc un niveau de gravité en dessous duquel la fonction spip_log() ne fonctionne pas. Pour être sûr de faire fonctionner une mise en log, voici un exemple :
spip_log("xxxxx",'testlog8');
Notez le 8 dans le nom de fichier, indiquant un niveau de gravité supérieur à ceux de SPIP (fixé à 7 maxi). L’informations sera donc bien stockée dans testlog.log.

En cochant l’option « Désactiver totalement les logs », le Couteau Suisse créera alors une fonction vide surchargeant à la source le fonctionnement normal de SPIP et empêchant toute journalisation :

function inc_log(){}

L’outil « Profiling »

Cet outil présent dans la catégorie « Développement » (dès la version 1.9.3 du Couteau Suisse) vous aide à collecter des mesures sur la qualité de certains actions. Voici à ce jour deux paramétrages disponibles :

-  Tracer les requêtes lentes
Depuis Spip 2.1.22 et 3.0.9, cette option permet d’indiquer dans les logs de MySQL (log/mysql-slow.log) l’URL correspondant aux requêtes trop « lentes ».

-  Tracer les boucles lentes
Depuis Spip 3.0.9 (et, en SPIP 2.1 avec le plugin « itérateurs »), cette option permet d’ajouter un fichier de log (tmp/log/profiler.log) traçant le nom des boucles (et des squelettes appelant) dont le calcul dépasse un seuil que vous définissez en secondes.

À noter : L’appel en URL du paramètre « var_profile=1 » affiche le détail des requêtes SQL et les temps de calcul de chacune. Les requêtes sont classées de la plus gourmande en temps d’exécution à la plus rapide.
Cette fonction est particulièrement utile pour comprendre ce qui peut rendre une page excessivement lente à s’afficher.
Elle permet de visualiser les requêtes SQL générées par chaque boucle du squelette (y compris les squelettes inclus) ainsi que les requêtes hors boucle (notées « Hors Compilation ») générées par SPIP.

Autres lames, autres options

-  L’outil « Fonctions d’autorisations » permet de « journaliser » ce qui touche aux autorisations grâce au paramètre « Tracer les autorisations dans tmp/log/spip.log »
Note : ce paramètre requiert un filtre de gravité réglé à plus de 6 (INFO).
Logs
-  Les logs spécifiques au Couteau Suisse s’activent grâce à l’outil « Comportements du Couteau Suisse ».
-  Le décalage horaire utilisé par les fonctions de date/heure se configure grâce à l’outil « Décalage horaire » (PHP 5.1 minimum).

Autres plugins et articles sur les logs

-  Plugin Simple Logs pour visualiser les logs.
-  http://contrib.spip.net/Les-Log
-  http://programmer.spip.net/spip_log

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom