179 lignes
Pas d'EOL
6,2 Kio
PHP
179 lignes
Pas d'EOL
6,2 Kio
PHP
<?php
|
|
namespace App\Http\Utility;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
use Monolog\Logger;
|
|
use Monolog\Handler\StreamHandler;
|
|
use Monolog\Formatter\LineFormatter;
|
|
use App\Http\Controllers\Core\Exception;
|
|
|
|
|
|
class debug{
|
|
|
|
private static function obsafe_print_r($var, $return = false, $html = false, $level = 0, $prevTab='') {
|
|
$spaces = "";
|
|
$space = $html ? " " : " ";
|
|
$newline = $html ? "<br>" : "\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);
|
|
}
|
|
} |