1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
16: class Log {
17:
18:
19: private static $logger = false;
20:
21:
22: private static $fichiersLog = array();
23:
24:
25: private static $cheminLogs = '';
26:
27:
28: private static $droitLogger = true;
29:
30:
31: private static $timeZone = 'Europe/Paris';
32:
33:
34: private static $tailleMax = 10000;
35:
36:
37: private static $sd = DIRECTORY_SEPARATOR;
38:
39:
40: private static $ext = '.log';
41:
42:
43: private static $parametres_obligatoires = array('chemin_logs', 'i18n_timezone', 'log_taille_max', 'log_debogage');
44:
45:
46: public static function initialiser() {
47:
48: if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) {
49: date_default_timezone_set(self::$timeZone);
50: }
51:
52: if (self::$logger && (!is_dir(self::$cheminLogs) || !is_writable(self::$cheminLogs))) {
53: self::desactiverEcriture();
54: }
55: }
56:
57:
58: public static function configurer() {
59: Config::verifierPresenceParametres(self::$parametres_obligatoires);
60: self::$cheminLogs = Config::get('chemin_logs');
61: self::$timeZone = (Config::get('i18n_timezone') != '') ? Config::get('i18n_timezone') : self::$timeZone;
62: self::$tailleMax = (Config::get('log_taille_max') != '') ? Config::get('log_taille_max') : self::$tailleMax;
63: self::$logger = (Config::get('log_debogage') != '') ? Config::get('log_debogage') : self::$logger;
64: self::initialiser();
65: }
66:
67: 68: 69: 70:
71: public static function ajouterEntree($nomFichier, $entree, $mode = 'a+') {
72: if (self::$droitLogger) {
73: $date = "\n\n".date('d m Y H:i')."\n" ;
74:
75: if (self::verifierOuvrirFichier($nomFichier, $mode)) {
76: fwrite(self::$fichiersLog[$nomFichier], $date.$entree);
77: self::verifierTailleFichierOuArchiver($nomFichier);
78: } else {
79: self::desactiverEcriture($nomFichier);
80: }
81: }
82: }
83:
84: 85: 86: 87:
88: public static function viderLog($nomFichier) {
89: self::ajouterEntree($nomFichier, '', 'w');
90: }
91:
92: 93: 94: 95: 96: 97:
98: public static function verifierOuvrirFichier($nomFichier,$mode) {
99: if (in_array($nomFichier, self::$fichiersLog)) {
100: if (is_writable(self::$cheminLogs.$nomFichier.self::$ext)) {
101: return true;
102: }
103: return false;
104: } else {
105: $fp = @fopen(self::$cheminLogs.$nomFichier.self::$ext,$mode);
106: if ($fp && is_writable(self::$cheminLogs.$nomFichier.self::$ext)) {
107: self::$fichiersLog[$nomFichier] = $fp;
108: return true;
109: }
110: return false;
111: }
112: }
113:
114: 115: 116: 117: 118:
119: private static function verifierTailleFichierOuArchiver($nomFichier) {
120: if(filesize(self::$cheminLogs.$nomFichier.self::$ext) > self::$tailleMax) {
121: rename(self::$cheminLogs.$nomFichier.self::$ext,self::$cheminLogs.$nomFichier.date('d_m_Y_H:i').self::$ext);
122: self::ajouterEntree($nomFichier,'');
123: }
124: }
125:
126: 127: 128: 129:
130: private static function desactiverEcriture($nomFichier = '') {
131: self::$droitLogger = false;
132: if ($nomFichier != '') {
133: $fichierDossier = 'fichier '.$nomFichier ;
134: } else {
135: $fichierDossier = 'dossier des logs';
136: }
137: $message = 'Écriture impossible dans le '.$fichierDossier.', Assurez-vous des droits du dossier et des fichiers';
138: $e = new ErrorException($message, 0, E_USER_WARNING, __FILE__, __LINE__);
139: GestionnaireException::gererException($e);
140: }
141:
142:
143: public function __destruct() {
144: foreach(self::$fichiersLog as $nomFichier => $fp) {
145: fclose($fp);
146: }
147: }
148: }
149: ?>