Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 122 → Rev 123

/trunk/framework/Log.php
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);
}
}
}
?>