17.3 Log
L'API REST possède un système de logging permettant de logger les cas d'erreur (accès à des ressources inexistantes, erreur PHP, erreur documentaire, etc.)
17.3.1 Système de log par défaut
Par défaut le système de log utilise la classe de log de Dynacase et les logs sont enregistrés à chaque erreur et envoyés dans syslog.
17.3.2 Ajout d'un système de log tiers
Il est possible d'ajouter un système de log tiers (mail, outil de supervision, etc.) Il y a deux étapes à suivre :
17.3.2.1 Création d'une classe de Log
Il faut réer une classe qui hérite de classe abstraite de log de l'API \Dcp\HttpApi\V1\Logger\Logger
.
Ci-dessous un exemple avec une classe (fournie en standard par l'API mais non activée par défaut) qui log les erreurs dans error.log de Apache.
<?php
namespace Dcp\HttpApi\V1\Logger;
class ErrorLog extends Logger {
public function writeError($message, $context = null, $stack = null) { if ($context === null && \Doc::getUserId()) { $context = "User : " . $this->getUserInfo(); } $stack = preg_replace('!\s+!', ' ', $stack); $logMessage = sprintf("Error : ## Message : %s ## Context : %s ## Stack : %s", $message, $context, $stack); error_log($logMessage); }
public function writeMessage($message, $context) {
}
public function writeWarning($message, $context = null, $stack = null) { if ($context === null && \Doc::getUserId()) { $context = "User : " . $this->getUserInfo(); } $stack = preg_replace('!\s+!', ' ', $stack); $logMessage = sprintf("Warning : ## Message : %s ## Context : %s ## Stack : %s", $message, $context, $stack); error_log($logMessage); }
protected function getUserInfo() { return \Doc::getUserId() . " " . \Doc::getUserName(); } }
La classe ci-dessus log les erreurs de type Warning
et Erreur
et ignore les Message
.
17.3.2.2 Enregistrement de la classe de log
La nouvelle classe de log doit ensuite être enregistrée auprès de l'application HTTPAPI_V1
, ceci se fait via le
paramètre applicatif CUSTOM_LOGGER
.
Celui doit contenir un array json listant les classes de log que vous souhaitez ajouter, celle-ci seront initialisées lors d'une requête auprès de l'API et les messages seront envoyés si besoin.
Par exemple, pour enregistrer la classe ci-dessus, il faut ajouter le JSON suivant :
["\\Dcp\\HttpApi\\V1\\Logger\\ErrorLog"]