Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 121 → Rev 122

/trunk/framework/Log.php
New file
0,0 → 1,121
<?php
//declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category PHP
* @package framework
* @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/
*/
 
class Log {
 
/**
* Tableau associatif stockant les descripteurs de fichiers
*/
private static $fichiersLog = array();
 
/**
* 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;
 
/**
* Zone horaire (pour éviter des avertissements dans les dates)
*/
private static $timeZone = '';
 
/**
* séparateur de chemin
*/
private static $sd = DIRECTORY_SEPARATOR;
 
/**
* 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');
 
// 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;
}
 
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();
}
}
}
}
 
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;
}
 
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);
}
 
public function __destruct() {
foreach(self::$fichiersLog as $nomFichier => $fp) {
fclose($fp);
}
}
}
?>