This is a simple Log Viewer for viewing CodeIgniter logs in the browser or via API calls (that returns a JSON response)
This project is inspired by the laravel-log-viewer project.
A typical log view looks like this:
For CodeIgniter 3, see this reference guide
composer require seunmatt/codeigniter-log-viewer
All that is required is to execute the showLogs()
method in a Controller that is mapped to a route:
A typical Controller (LogViewerController.php) will have the following content:
namespace App\Controllers;
use CILogViewer\CILogViewer;
class LogViewerController extends BaseController
{
public function index() {
$logViewer = new CILogViewer();
return $logViewer->showLogs();
}
}
Then the route app/Config/Routes.php
can be configured like:
$routes->get('logs', "LogViewerController::index");
And that's all! If you visit /logs
on your browser
you should see all the logs that are in writable/logs
folder and their content
The package allows you to configure some of its parameters by creating a CILogViewer
class in CodeIgniter's Config
folder and then adding the following variables:
The folder path for log files can be configured with the $logFolderPath
config var.
The file pattern for matching all the log files in the log folder can be configured by adding $logFilePattern
config var.
The name of the view that renders the logs page can be changed using the $viewName
config var. Please note that this can be a route relative to your View
path or a namespace route.
Example configuration file app/Config/CILogViewer.php
:
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class CILogViewer extends BaseConfig {
public $logFilePattern = 'log-*.log';
public $viewName = 'logs'; //where logs exists in app/Views/logs.php
}
If you're developing an API Service, powered by CodeIgniter, this library can still be used to view your log files.
The setup is the same as that mentioned above:
Create a Controller e.g. ApiLogViewerController.php
,
Create a function e.g. index()
In the function, call echo $this->logViewer->showLogs();
Finally, map your controller function to a route.
The API is implemented via a set of query params that can be appended to the /logs
path.
Query:
/logs?api=list
will list all the log files available in the configured folder
Response:
{
"status": true,
"log_files": [
{
"file_b64": "bG9nLTIwMTgtMDEtMTkucGhw",
"file_name": "log-2018-01-19.php"
},
{
"file_b64": "bG9nLTIwMTgtMDEtMTcucGhw",
"file_name": "log-2018-01-17.php"
}
]
}
file_b64 is the base64 encoded name of the file that will be used in further operations and API calls
Query:
/logs?api=view&f=bG9nLTIwMTgtMDEtMTcucGhw
will return the logs contained in the log file specified by the f
parameter.
The value of the f
(f stands for file) is the base64 encoded format of the log file name. It is obtained from the /logs?api=list
API call.
A list of all available log files is also returned.
Response:
{
"log_files": [
{
"file_b64": "bG9nLTIwMTgtMDEtMTkucGhw",
"file_name": "log-2018-01-19.php"
},
{
"file_b64": "bG9nLTIwMTgtMDEtMTcucGhw",
"file_name": "log-2018-01-17.php"
}
],
"status": true,
"logs": [
"ERROR - 2018-01-23 07:12:31 --> 404 Page Not Found: admin/Logs/index",
"ERROR - 2018-01-23 07:12:37 --> 404 Page Not Found: admin//index",
"ERROR - 2018-01-23 15:23:02 --> 404 Page Not Found: Faviconico/index"
]
}
The API Query can also take one last parameter, sline
that will determine how the logs are returned
When it's true
the logs are returned in a single line:
Query:
/logs?api=view&f=bG9nLTIwMTgtMDEtMTkucGhw&sline=true
Response:
{
"log_files": [
{
"file_b64": "bG9nLTIwMTgtMDEtMTkucGhw",
"file_name": "log-2018-01-19.php"
},
{
"file_b64": "bG9nLTIwMTgtMDEtMTcucGhw",
"file_name": "log-2018-01-17.php"
}
],
"status": true,
"logs": "ERROR - 2018-01-23 07:12:31 --> 404 Page Not Found: admin/Logs/index\r\nERROR - 2018-01-23 07:12:37 --> 404 Page Not Found: admin//index\r\nERROR - 2018-01-23 15:23:02 --> 404 Page Not Found: Faviconico/index\r\n"
}
When it's false
(Default), the logs are returned in as an array, where each element is a line in the log file:
Query:
/logs?api=view&f=bG9nLTIwMTgtMDEtMTkucGhw&sline=false
OR logs?api=view&f=bG9nLTIwMTgtMDEtMTkucGhw
Response:
{
"logs": [
"ERROR - 2018-01-23 07:12:31 --> 404 Page Not Found: admin/Logs/index",
"ERROR - 2018-01-23 07:12:37 --> 404 Page Not Found: admin//index",
"ERROR - 2018-01-23 15:23:02 --> 404 Page Not Found: Faviconico/index"
]
}
Query:
/logs?api=delete&f=bG9nLTIwMTgtMDEtMTkucGhw
will delete a single log file. The f parameter is the base64 encoded name of the file
and can be obtained from the view api above.
Query:
/logs?api=delete&f=all
will delete all log files in the configured folder path. Take note of the value for f which is the literal 'all'.
IF A FILE IS TOO LARGE (> 50MB), YOU CAN DOWNLOAD IT WITH THIS API QUERY /logs?dl=bG9nLTIwMTgtMDEtMTcucGhw
It is Highly Recommended that you protect/secure the route for your logs. It should not be an open resource!