logs.ctp
2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?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;
?>