5,117 → 5,143 |
* |
* @category PHP |
* @package framework |
* @author aurelien <aurelien@tela-botanica.org> |
* @author aurelien <aurelien@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/framework/ |
* @link /doc/framework/ |
*/ |
|
class Log { |
|
/** |
* Tableau associatif stockant les descripteurs de fichiers |
*/ |
private static $fichiersLog = array(); |
/** |
* Tableau associatif stockant les descripteurs de fichiers |
*/ |
private static $fichiersLog = array(); |
|
/** |
* Chemin de base du dossier log de l'application |
*/ |
private static $cheminLogs = ''; |
/** |
* Chemin de base du dossier log de l'application |
*/ |
private static $cheminLogs = ''; |
|
/** |
* Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs |
*/ |
private static $droitLogger = true; |
/** |
* Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs |
*/ |
private static $droitLogger = true; |
|
/** |
* Zone horaire (pour éviter des avertissements dans les dates) |
*/ |
private static $timeZone = ''; |
/** |
* Zone horaire (pour éviter des avertissements dans les dates) |
*/ |
private static $timeZone = ''; |
|
/** |
* séparateur de chemin |
*/ |
private static $sd = DIRECTORY_SEPARATOR; |
/** |
* séparateur de chemin |
*/ |
private static $sd = DIRECTORY_SEPARATOR; |
|
/** |
* La classe registre se contient elle-même, (pour le pattern singleton) |
*/ |
private static $log; |
/** |
* La classe registre se contient elle-même, (pour le pattern singleton) |
*/ |
private static $log; |
|
/** |
* Constructeur par défaut, privé, car on accède à la classe par le getInstance |
*/ |
private function __construct() { |
self::$sd = Config::get('ds'); |
self::$cheminLogs = Config::get('chemin_logs'); |
self::$timeZone = Config::get('fw_timezone'); |
/** |
* Constructeur par défaut, privé, car on accède à la classe par le getInstance |
*/ |
private function __construct() { |
self::$sd = Config::get('ds'); |
self::$cheminLogs = Config::get('chemin_logs'); |
self::$timeZone = Config::get('fw_timezone'); |
|
// gestion de la timezone pour éviter des erreurs |
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) { |
date_default_timezone_set(self::$timeZone); |
} |
} |
// gestion de la timezone pour éviter des erreurs |
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) { |
date_default_timezone_set(self::$timeZone); |
} |
} |
|
/** |
* Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être |
* utilisée pour récupérer l'objet Registre |
*/ |
public static function getInstance() { |
if (self::$log instanceof Log) { |
return self::$log; |
} |
self::$log = new Log(); |
return self::$log; |
} |
/** |
* Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être |
* utilisée pour récupérer l'objet Registre |
*/ |
public static function getInstance() { |
if (self::$log instanceof Log) { |
return self::$log; |
} |
self::$log = new Log(); |
return self::$log; |
} |
|
public static function ajouterEntree($nomFichier,$entree,$mode='a+') { |
if(self::$droitLogger) { |
$date = "\n"."\n".date('d m Y H:i')."\n" ; |
/** |
* Ajoute une entrée au log spécifié par le paramètre $nomFichier |
* @param string $nomFichier le nom du fichier dans lequel écrire |
*/ |
public static function ajouterEntree($nomFichier,$entree,$mode='a+') { |
if(self::$droitLogger) { |
$date = "\n"."\n".date('d m Y H:i')."\n" ; |
|
// si le fichier est déjà dans le tableau et qu'on peut y écrire |
if(in_array($nomFichier,self::$fichiersLog)) { |
if(is_writable(self::$fichiersLog[$nomFichier])) { |
fwrite(self::$fichiersLog[$nomFichier],$date.$entree); |
} else { |
self::desactiverEcriture(); |
} |
} else { |
if($fp = fopen(self::$cheminLogs.$nomFichier,'a+') && is_writable($fp)) { |
self::$fichiersLog[$nomFichier] = $fp; |
fwrite(self::$fichiersLog[$nomFichier],$date.$entree); |
} else { |
self::desactiverEcriture(); |
} |
} |
} |
} |
// si le fichier est déjà dans le tableau et qu'on peut y écrire |
if(in_array($nomFichier,self::$fichiersLog)) { |
if(is_writable(self::$cheminLogs.$nomFichier)) { |
fwrite(self::$fichiersLog[$nomFichier],$date.$entree); |
} else { |
self::desactiverEcriture($nomFichier); |
} |
} else { |
$fp = fopen(self::$cheminLogs.$nomFichier,$mode); |
if($fp) { |
if(is_writable(self::$cheminLogs.$nomFichier)) { |
self::$fichiersLog[$nomFichier] = $fp; |
fwrite(self::$fichiersLog[$nomFichier],$date.$entree); |
} else { |
self::desactiverEcriture($nomFichier); |
} |
} else { |
self::desactiverEcriture($nomFichier); |
} |
} |
} |
} |
|
public static function viderLog($nomFichier) { |
if(self::verifierPresenceFichier($nomFichier)) { |
ajouterEntree($nomFichier,'','w'); |
} |
} |
/** |
* Vide un fichier log indiqué |
* @param string $nomFichier le nom du fichier à vider |
*/ |
public static function viderLog($nomFichier) { |
if(self::verifierPresenceFichier($nomFichier)) { |
ajouterEntree($nomFichier,'','w'); |
} |
} |
|
public static function verifierPresenceFichier($nomFichier) { |
if(in_array($nomFichier,self::$fichiersLog)) { |
return true; |
} |
return false; |
} |
/** |
* Vérifie la présence d'un fichier dans le tableau (et bientot plein |
* d'autres choses). |
* @param string $nomFichier le nom du fichier dont on doit vérifier la présence |
* @return boolean vrai si le fichier est dans le tableau, faux sinon |
*/ |
public static function verifierPresenceFichier($nomFichier) { |
if(in_array($nomFichier,self::$fichiersLog)) { |
return true; |
} |
return false; |
} |
|
private static function desactiverEcriture() { |
self::$droitLogger = false; |
$message = 'Impossible d\'écrire dans le fichier de log spécifié, Vérifiez les droits du dossier de logs et du fichier'; |
$e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__); |
GestionnaireException::gererException($e); |
} |
/** |
* Désactive l'écriture du log et envoie un message au gestionnaire d'erreurs |
* @param string $nomFichier le nom du fichier qui a causé l'erreur |
*/ |
private static function desactiverEcriture($nomFichier) { |
self::$droitLogger = false; |
$message = 'Ecriture impossible dans le fichier '.$nomFichier.', Assurez-vous des droits du dossier de logs et du fichier'; |
$e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__); |
GestionnaireException::gererException($e); |
} |
|
public function __destruct() { |
foreach(self::$fichiersLog as $nomFichier => $fp) { |
fclose($fp); |
} |
} |
/** |
* destructeur de classe, ferme les descripteurs ouverts |
*/ |
public function __destruct() { |
foreach(self::$fichiersLog as $nomFichier => $fp) { |
fclose($fp); |
} |
} |
} |
?> |