Par défaut, Drupal va enregistrer les événements dans sa base de données, via le module Database Logging inclus dans le "core".
L'inconvénient majeur est de générer un nombre important d'écriture en base, ce qui impacte directement les performances, et fait grossir inutilement la base de données.
Il est bien sûr possible de désactiver complètement ces traces, mais elles peuvent révéler des soucis (notamment des fichiers inexistants, des tentatives de connexions infructueuses, etc.).
Une solution alternative est possible en standard : Syslog , à utiliser sur un serveur type VPS ou dédié, sur lequel on aura un accès en tant qu'administrateur (root).
Activation de Syslog dans Drupal
Il suffit d'activer le module Syslog dans la page d'administration des modules, et de désactiver le module Database Logging dans cette même page.
On peut ensuite aller configurer Syslog, via la page : /admin/config/development/logging.
On peut principalement modifier l'identité Syslog, le niveau utilisé, ainsi que le format de la ligne.
On sauvegarde les informations, et on peut ensuite passer au paramétrage coté serveur.
Paramétrage sur le serveur
Sur un serveur à base Ubuntu, le paramétrage du service (r)syslog s'effectue soit directement dans le fichier /etc/rsyslog.conf, soit dans un des fichiers du répertoire /etc/rsyslog.d. On va créer pour nos besoins un fichier /etc/rsyslog.d/drupal.conf, qui contient :
local0.* /var/log/drupal.log
Dans notre cas, nous avons sélectionné LOG_LOCAL0 dans le paramétrage du module Drupal. On fournit aussi le nom du fichier de logs qui sera utilisé.
Il reste à redémarrer le service :
# service rsyslog restart
Sur un serveur sous Debian 6, le service est syslog, et le fichier de configuration syslog.conf. On ajoute la ligne correspondante et on redémarre le service :
# /etc/init.d/sysklogd restart
Paramétrage avec syslog-ng
Le format de paramétrage de syslog-ng est assez différent de syslog. Pour Drupal, on peut ajouter un fichier drupal.conf dans le répertoire /etc/syslog-ng/conf.d :
destination d_drupal { file("/var/log/drupal.log");}; filter f_drupal { program("drupal"); }; log { source(s_src); filter(f_drupal); destination(d_drupal);};
Le fichier définit :
- une destination : le fichier de log
- un filtre : on filtre ici sur le programme drupal
- un mécanisme de log qui relie une source, un filtre et une destination. La source est définie dans le fichier syslog-ng.conf.