Skip to content

Commit f85ded0

Browse files
committed
Add base logic
0 parents  commit f85ded0

File tree

9 files changed

+226
-0
lines changed

9 files changed

+226
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.idea
2+
vendor

composer.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "cherry-project/logs-viewer",
3+
"description": "Cherry-project Logs Viewer.",
4+
"type": "library",
5+
"keywords": ["cherry","logs","logs=viewer"],
6+
"homepage": "https://github.com/",
7+
"license": "MIT",
8+
"authors": [
9+
{
10+
"name": "ABGEO",
11+
"email": "[email protected]",
12+
"homepage": "http://www.abgeo.ga",
13+
"role": "Developer"
14+
}
15+
],
16+
"minimum-stability": "dev",
17+
"require": {
18+
"php": ">=5.6.0"
19+
},
20+
"autoload": {
21+
"psr-4": {
22+
"Cherry\\": "src/"
23+
}
24+
}
25+
}

composer.lock

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/index.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
require_once __DIR__ . "/../vendor/autoload.php";
4+
5+
define('LOGS_PATH', __DIR__ . '/var/logs');
6+
7+
$lv = new \Cherry\Log\LogViewer();

examples/var/logs/kernel.log

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[2019-03-30 19:36:47] INFO: Info Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 11.
2+
[2019-03-30 19:36:47] WARNING: Warning Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 12.
3+
[2019-03-30 19:36:47] ERROR: Error Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 13.
4+
[2019-03-30 19:36:47] DEBUG: Debug Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 14.
5+
[2019-03-30 19:36:47] INFO: Info Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 16.
6+
[2019-03-30 19:36:47] WARNING: Warning Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 17.
7+
[2019-03-30 19:36:47] ERROR: Error Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 18.
8+
[2019-03-30 19:36:47] DEBUG: Debug Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 19.

examples/var/logs/kernel2.log

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[2019-03-30 19:36:47] INFO: Info Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 11.
2+
[2019-03-30 19:36:47] WARNING: Warning Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 12.
3+
[2019-03-30 19:36:47] ERROR: Error Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 13.
4+
[2019-03-30 19:36:47] DEBUG: Debug Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 14.
5+
[2019-03-30 19:36:47] INFO: Info Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 16.
6+
[2019-03-30 19:36:47] WARNING: Warning Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 17.
7+
[2019-03-30 19:36:47] ERROR: Error Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 18.
8+
[2019-03-30 19:36:47] DEBUG: Debug Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 19.

examples/var/logs/kernel3.log

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[2019-03-30 19:36:47] INFO: Info Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 11.
2+
[2019-03-30 19:36:47] WARNING: Warning Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 12.
3+
[2019-03-30 19:36:47] ERROR: Error Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 13.
4+
[2019-03-30 19:36:47] DEBUG: Debug Message In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 14.
5+
[2019-03-30 19:36:47] INFO: Info Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 16.
6+
[2019-03-30 19:36:47] WARNING: Warning Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 17.
7+
[2019-03-30 19:36:47] ERROR: Error Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 18.
8+
[2019-03-30 19:36:47] DEBUG: Debug Message 2 In /home/abgeo/Programming/MyProjects/PHP/Projects/Cherry-project/Logger/examples/test.php On line 19.

src/Log/LogViewer.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
namespace Cherry\Log;
4+
5+
class LogViewer
6+
{
7+
private $logsPath;
8+
private $logsFiles;
9+
10+
public function __construct()
11+
{
12+
$this->logsPath = LOGS_PATH;
13+
14+
$logFiles = $this->_getLogFiles();
15+
16+
$this->logsFiles = $logFiles;
17+
18+
$logs = $this->_readLogs($this->logsPath . '/' . $logFiles[0]);
19+
20+
require_once __DIR__ . '/../templates/logs.php';
21+
}
22+
23+
private function _getLogFiles()
24+
{
25+
$logFiles = [];
26+
27+
if ($handle = opendir($this->logsPath)) {
28+
while (false !== ($entry = readdir($handle))) {
29+
if ($entry != "." && $entry != "..") {
30+
$logFiles[] = $entry;
31+
}
32+
}
33+
34+
closedir($handle);
35+
}
36+
37+
natsort($logFiles);
38+
39+
return $logFiles;
40+
}
41+
42+
private function _readLogs(string $logsFile)
43+
{
44+
$logs = [];
45+
46+
$handle = fopen($logsFile,"r");
47+
48+
while(!feof($handle)) {
49+
$line = fgets($handle);
50+
51+
if ($line != '') {
52+
53+
$dateTimeStart = strpos($line, '[');
54+
$dateTimeEnd = strpos($line, ']', $dateTimeStart);
55+
$levelEnd = strpos($line, ':', $dateTimeEnd);
56+
57+
$log = [
58+
"dateTime" => substr($line, $dateTimeStart + 1, $dateTimeEnd - $dateTimeStart - 1),
59+
"level" => substr($line, $dateTimeEnd + 3, $levelEnd - $dateTimeEnd - 3),
60+
"message" => substr($line, $levelEnd + 2)
61+
];
62+
$logs[] = $log;
63+
}
64+
}
65+
66+
fclose($handle);
67+
68+
return $logs;
69+
}
70+
}

src/templates/logs.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Cherry framework Logs viewer</title>
6+
7+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
8+
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs4/dt-1.10.18/datatables.min.css"/>
9+
</head>
10+
<body>
11+
<nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
12+
<a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Cherry framework Logs viewer</a>
13+
</nav>
14+
15+
<div class="container-fluid">
16+
<div class="row">
17+
<nav class="col-md-2 d-none d-md-block bg-light sidebar">
18+
<div class="sidebar-sticky pt-5">
19+
<ul class="nav flex-column">
20+
21+
<?php foreach ($logFiles as $k => $v): ?>
22+
<li class="nav-item">
23+
<a class="nav-link active" href="#"><?php echo $v; ?></a>
24+
</li>
25+
<?php endforeach; ?>
26+
27+
</ul>
28+
</div>
29+
</nav>
30+
31+
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
32+
<h2>Logs</h2>
33+
34+
<?php
35+
$trClasses = [
36+
'INFO' => 'table-info',
37+
'WARNING' => 'table-warning',
38+
'ERROR' => 'table-danger',
39+
'DEBUG' => 'table-secondary'
40+
];
41+
?>
42+
43+
<div class="table-responsive">
44+
<table class="table table-striped table-sm" id="logsTable">
45+
<thead>
46+
<tr>
47+
<th>Date & Time</th>
48+
<th>Log Level</th>
49+
<th>Log Message</th>
50+
</tr>
51+
</thead>
52+
<tbody>
53+
<?php foreach ($logs as $k => $log): ?>
54+
<tr id="log-<?php echo $k; ?>" class="<?php echo $trClasses[$log['level']]; ?>">
55+
<td><?php echo $log['dateTime']; ?></td>
56+
<td><?php echo $log['level']; ?></td>
57+
<td><?php echo $log['message']; ?></td>
58+
</tr>
59+
<?php endforeach; ?>
60+
</tbody>
61+
</table>
62+
</div>
63+
</main>
64+
</div>
65+
</div>
66+
67+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
68+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
69+
<script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.18/datatables.min.js"></script>
70+
71+
<script>
72+
$(document).ready(function() {
73+
$('#logsTable').DataTable( {
74+
"order": [[ 0, "desc" ]]
75+
} );
76+
} );
77+
</script>
78+
</body>
79+
</html>

0 commit comments

Comments
 (0)