Chapitre: Debuggage et utilisation de jLog
« Configurer la gestion des erreurs | ^ Aide au développement | Développer des tests unitaires » |
− Table des matières
jLog ¶
jLog est une classe qui permet de tracer, ou plus précisément d'écrire des messages ou le contenu de variable dans un fichier journal ou un autre système de sortie : syslog, firebug etc. Cela peut être utile pour tracer certains évènements, mais aussi pour aider au débogage.
jLog a des plugins pour ajouter des supports de log (appelé "loggeur"), et est
aussi utilisé pour stocker les erreurs. La classe jLog
possède deux
méthodes statiques :
jLog::log($message, $logType)
pour écrire un messagejLog::dump($variable, $message, $logType)
pour écrire le contenu de la variable (il s'agit en fait d'unvar_export
)
Le "loggeur" par défaut est le loggeur fichier. Les messages sont stockés dans
un fichier var/log/messages.log
, ou var/log/errors.log
pour les
erreurs. $logType
indique le type de message. Et à chaque type sont assignés
un ou plusieurs loggeurs.
Configurer jLog ¶
Pour spécifier les loggeurs à utiliser pour chaque type de message, vous devez
remplir la section [logger]
dans la configuration (pour rappel, dans le
fichier app/system/mainconfig.ini.php
ou var/config/localconfig.ini.php
).
Par défaut :
[logger]
_all =
default=file
error= file
warning=file
notice=file
deprecated=
strict=
debug=
Les nom d'options sont les types de messages ($logType). Vous pouvez utiliser n'importe quel nom, bien que certains noms soient déjà réservés :
default
: loggeurs par défaut,error
,warning
,notice
,deprecated
,strict
: utilisé par le gestionnaire d'erreur, pour les messages d'erreurs.sql
, pour jDb (dans l'édition dev), pour logguer les requêtes SQLsoap
, pour jSoapClient, pour logger les messages soap.
Et les valeurs des options sont des listes de loggeurs (les noms correspondant aux noms des plugins). Vous indiquerez :
file
pour stocker dans les fichiers. Les noms des fichiers sont indiqués dans une section[filelogger]
.syslog
pour envoyer les messages au syslogfirebug
, pour afficher les messages dans la console javascript du navigateur (Il y a quelques années, cela n'était possible qu'avec l'extension Firebug pour Firefox, d'où son nom)mail
, pour envoyer les messages dans une boite mailmemory
, pour stocker les message en mémoire temporairement. Utilisé par d'autres composants comme la debug barre.stdout
etstderr
pour envoyer les logs sur la sortie standard- et tout autre plugin que vous avez ajouté ou créé.
Eviter d'avoir des informations sensibles dans les logs ¶
Dans les logs d'erreurs, les paramètres HTTP sont écrits afin de faciliter le débuggage. Cependant, certaines de ces données sont sensibles, tels que les contenus des champs de saisie de mots de passe.
Depuis Jelix 1.6.16, il est possible d'indiquer dans les contrôleurs et dans la configuration quels paramètres contiennent des informations sensibles, et donc qu'il ne faut pas mettre dans les logs.
Dans la section error_handling
de la configuration, vous pouvez ajouter
le paramètre sensitiveParameters
indiquant la liste des paramètres
HTTP sensibles, séparés par une virgule.
Par défault, il a cette valeur :
[error_handling]
sensitiveParameters = "password,passwd,pwd"
Vous pouvez aussi indiquer les paramètres sensibles dans les contrôleurs, comme ceci :
class passwordCtrl extends jController {
public $sensitiveParameters = array('pwd', 'pwd_confirm');
// ...
}
Notez que jForms declare automatiquement tous les contrôles de type "secret" comme étant des valeurs sensibles, et donc qu'il n'est pas nécessaire de les indiquer dans la configuration ou les contrôleurs.
Loggeur fichier ¶
Quand vous utilisez ce loggeur, vous devez indiquer dans quel fichier vont les
messages. Les fichiers sont indiqués dans la section [filelogger]
. Les noms
des options sont les types de messages, et les valeurs les noms des fichiers
(dans var/log/
).
Exemple (valeurs par défaut) :
[fileLogger]
default=messages.log
error=errors.log
warning=errors.log
notice=errors.log
deprecated=errors.log
strict=errors.log
debug=debug.log
Il arrive que plusieurs développeurs travaillent sur un même serveur : il y aurait alors dans un même fichier toutes les traces que chacun aurait mises. Il est possible d'avoir autant de fichiers journaux que de développeurs, à condition qu'ils aient une adresse IP différente. Il suffit d'inclure "%ip%" dans le nom du fichier :
[fileLogger]
default = "messages_%ip%.log"
news = "%ip%_modulenews.log"
Ainsi, si un développeur a son poste de travail en 192.168.1.2, alors il y aura
des fichiers var/log/192.168.1.2_modulenews.log
et
var/log/messages_192.168.1.2.log
.
Vous pouvez aussi construire les noms des fichiers de log avec la date et
l'heure : pour cela, incluez un ou plusieurs des "tags" suivant dans le nom :
%Y%
(année), %m%
(mois), %d%
(jour), %H%
(heure).
Loggeur mail ¶
Pour le configurer, vous devez indiquer l'adresse email et les entêtes email:
[mailLogger]
email = root@localhost
emailHeaders = "Content-Type: text/plain; charset=UTF-8\nFrom: webmaster@yoursite.com\nX-Mailer: Jelix\nX-Priority: 1 (Highest)\n"
Evitez d'utiliser ce loggeur, sauf si vous savez votre application très stable, où les erreurs ou messages sont rares. Sinon votre boîte risque d'être littéralement spammée (et votre hébergeur pas très content).
Il est plutôt recommandé, si c'est possible, de configurer le serveur de manière à envoyer par mail, une fois par jour par exemple, le contenu du fichier errors.log. Cela peut se faire sous linux en créant un script bach qui sera programmé dans le cron.
La barre de debug ¶
Jelix peut afficher une "debugbar", qui permet d'inspecter non seulement les détails des erreurs, mais aussi d'autres informations : données en sessions, requêtes sql etc. Chacune de ces informations étant fournie par des plugins. Vous pouvez donc créer vos propres plugins pour enrichir cette debugbar.
Sachant que la debugbar est elle-même un plugin de jResponseHtml, voici comment faire pour l'activer :
- vous devez ajouter "debugbar" dans la liste des plugins de jResponseHtml
- éventuellement indiquer la liste des plugins que vous voulez activer pour la debugbar (par défaut: "sqllog, sessiondata, defaultlog"
Voici un exemple typique, que l'on met bien souvent dans var/config/localconfig.ini.php
:
[jResponseHtml]
plugins = debugbar
[debugbar]
plugins = sqllog,sessiondata,defaultlog
defaultPosition = right
errors_openon=error
defaultPosition
indique si vous voulez afficher la debugbar à droite
(right
), à gauche (left
) ou au centre (center
) sur la page web. Vous pouvez aussi changer la
position dynamiquement.
errors_openon
indique pour quel niveau(x) d'erreur la liste des messages s'ouvre
à l'ouverture de la page. Les valeurs sont à choisir (séparateur virgule) parmi
error
, warning
, notice
, deprecated
et strict
ou plus prosaïquement
*
comme raccourci de l'ensemble de ces valeurs.
Envoi des mails ¶
jMailer a des paramètres de configuration qui permettent de ne pas envoyer réèllement les emails, ou alors de les envoyer à des personnes en particulier.
Voir le chapitre sur jMailer.