" : "\n"; for ($i = 1; $i <= 6; $i++) { $spaces .= $space; } $tabs = $spaces; for ($i = 1; $i <= $level; $i++) { $tabs .= $spaces; } if (is_array($var)) { $title = "Array("; } elseif (is_object($var)) { $title = get_class($var)." Object("; } $output = $title . $newline . $newline; foreach($var as $key => $value) { if (is_array($value) || is_object($value)) { $level++; $value = self::obsafe_print_r($value, true, $html, $level,$tabs); $level--; } $output .= $tabs . "[" . $key . "] => " . $value . $newline; } if ($return) return $output.$prevTab.')'. $newline; else echo $output; } /* Analyse, nettoie et converti un paramètre en une chaîne de caractère. @param mixed $param : Paramètre à analyser. @return string $text : Chaîne de retour. */ private static function parse($param,$HTMLArrayCompliant=false){ if(is_array($param) && !$HTMLArrayCompliant) $param = print_r($param,true); if((is_array($param) || is_object($param)) && $HTMLArrayCompliant) $param=self::obsafe_print_r($param,true,true); $param=str_replace("\n",' ',$param); $text = str_replace(array("\t","\r"),'',$param); //Remplacement des espaces successifs par un seul if(is_string($text)){ $text = trim(preg_replace('/\s{2,}/', ' ', $text)); } return $text; } /* Écrit dans le log général de Laravel @param mixed $toLog : Paramètre à analyser. */ public static function log($toLog,$HTMLArrayCompliant=false){ $callerbt = debug_backtrace(); $caller = $callerbt[0]; Log::debug('--=:::> '.self::parse($toLog,$HTMLArrayCompliant).' ['.$caller['function'].','.$caller['file'].','.$caller['line'].']'); } /* Écrit dans le log d'un module/entité en particulier @param mixed $toLog : Paramètre à analyser. @param string $logName : Nom du log servant au chemin et au fichier. @param string $level : Niveau d'erreur : [DEBUG] => 100 [INFO] => 200 [NOTICE] => 250 [WARNING] => 300 [ERROR] => 400 [CRITICAL] => 500 [ALERT] => 550 [EMERGENCY] => 600 @param array $data : Contexte du log */ public static function consign($toLog,$logName,$level='DEBUG',$data=[]){ $txt=self::parse($toLog); $today=Date('Y-m-d'); $logName = trim($logName); $logPath = ''; //Remplacement du double point ou du slash par du vide if($logName==='..' || $logName==='/'){ $logName = ''; } //Si le nom du log n'est pas vide, on rajoute le séparateur du dossier dans le chemin if($logName!==''){ $logPath = $logName.DIRECTORY_SEPARATOR; } $path = storage_path('logs'.DIRECTORY_SEPARATOR.$logPath.$today.'_'.$logName.'.log'); //Ajout d'un emplacement d'écriture $stream=new StreamHandler($path); $levels=Logger::getLevels(); $levelCode=$level && array_key_exists($level,$levels)?$levels[$level]:$levels['DEBUG']; //Création d'un nouveau canal de log $log = new Logger($logName); $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context%\n", 'Y-m-d H:i:s'); $stream->setFormatter($formatter); $log->pushHandler($stream); //Ecriture dans le log $log->addRecord($levelCode,$txt,$data); } public static function consignInto($toLog,$logName,$dir,$fileName,$level='DEBUG',$data=[]){ if(!empty($toLog)) throw new Exception(__METHOD__."consignInto ERROR:: toLog ne doit pas être vide"); if(!empty($logName)) throw new Exception(__METHOD__."consignInto ERROR:: logName ne doit pas être vide"); if(!empty($dir)) throw new Exception(__METHOD__."consignInto ERROR:: dir ne doit pas être vide"); if(!empty($fileName)) throw new Exception(__METHOD__."consignInto ERROR:: fileName ne doit pas être vide"); $txt=self::parse($toLog); $today=Date('Y-m-d'); $logName = trim($logName); $logPath = ''; // SECU : Remplacement du double point ou du slash par du vide if($logName==='..' || $logName==='/'){ $logName = ''; } //Si le nom du log n'est pas vide, on rajoute le séparateur du dossier dans le chemin if($logName!==''){ $logPath = $logName.DIRECTORY_SEPARATOR; } if($dir!==''){ $logPath .= $dir.DIRECTORY_SEPARATOR; } $path = storage_path('logs'.DIRECTORY_SEPARATOR.$logPath.$today.'_'.$logName.'.log'); //Ajout d'un emplacement d'écriture $stream=new StreamHandler($path); $levels=Logger::getLevels(); $levelCode=$level && array_key_exists($level,$levels)?$levels[$level]:$levels['DEBUG']; //Création d'un nouveau canal de log $log = new Logger($logName); $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context%\n", 'Y-m-d H:i:s'); $stream->setFormatter($formatter); $log->pushHandler($stream); //Ecriture dans le log $log->addRecord($levelCode,$txt,$data); } }