logs.ctp 2.24 KB
<?php
// parameters passed by controller
$info_levels = $info_levels; // ['info','notice','debug'];
$error_levels = $error_levels; // ['warning', 'error', 'critical', 'alert', 'emergency']
$level = $level;
?>
<h2>
	<!-- 
	<i class="icon-print"></i> 
	 -->
	<center>MESSAGES DE LOG</center>
</h2>

<p>
<center>
<?php
    foreach ($info_levels as $info_level) echo $this->Html->link(" [$info_level] ", ['action' => "logs?level=$info_level"]);
    echo '<br>';
    foreach ($error_levels as $error_level) echo $this->Html->link(" [$error_level] ", ['action' => "logs?level=$error_level"]);
?>
</center>
</p>
	
	

<?php

/* 
 * Lecture des $nblines_to_read dernières lignes du fichier logs/debug.log
 * puis
 * Affichage de ces lignes dans l'ordre inverse (ordre anti-chrono : de la plus récente à la plus ancienne)
 */

// On lit le fichier /WWWROOT/../logs/debug.log
$wwwroot_dir = new Cake\Filesystem\Folder(WWW_ROOT);
$logfile_name = in_array($level, $info_levels) ? 'debug':'error';
$logfile_path = $wwwroot_dir->pwd() . DS . '..' . DS . 'logs' . DS . $logfile_name.'.log';
$nblines_to_read = 5000;



/*
$f = fopen($logfile_path, "r") or die("Unable to open file!");
//echo fgets($f);
while(!feof($f)) {
    echo fgets($f) . "<br>";
}
fclose($f);
*/

// On va direct à la fin du fichier
try {
    $f = new SplFileObject($logfile_path, "r"); 
} catch (Exception $e) {
    echo("Le fichier de log '/logs/".basename($logfile_path)."' n'existe pas encore...");
    return;
}
$f->seek(PHP_INT_MAX);
$last_line = $f->key();

// Lire TOUT le fichier
//$lines = new LimitIterator($f, 0, $last_line);
// Lire seulement les $nblines_to_read dernières lignes
$line_num_from = max(0,$last_line-$nblines_to_read);
$lines = new LimitIterator($f, $line_num_from);
//$lines = new LimitIterator($f, $last_line-$nblines_to_read, $last_line);
//print_r(iterator_to_array($lines));

// Inversion des lignes pour affichage anti-chrono
$lines_reversed = array_reverse(iterator_to_array($lines));
$level = ucfirst($level);
foreach ($lines_reversed as $line) {
    if (mb_strpos($line, "$level: ") !== FALSE) echo $line.'<br><br>';
    //if (mb_strpos($line, 'Info: ') !== FALSE) echo $line.'<br><br>';
    //if (mb_strpos($line, '/materiels/edit/') !== FALSE) echo $line.'<br><br>';
}

// Close file
$f=null;

?>