Updates
This commit is contained in:
@@ -8,32 +8,33 @@ use ReflectionClass;
|
||||
use UTC;
|
||||
|
||||
/**
|
||||
* Class LaravelLogViewer.
|
||||
* Class LaravelLogViewer
|
||||
* @package Rap2hpoutre\LaravelLogViewer
|
||||
*/
|
||||
class LaravelLogViewer
|
||||
{
|
||||
class LaravelLogViewer {
|
||||
|
||||
/**
|
||||
* @var string file
|
||||
*/
|
||||
private static $file;
|
||||
private static $levels_classes = [
|
||||
'debug' => 'info',
|
||||
'info' => 'info',
|
||||
'notice' => 'info',
|
||||
'warning' => 'warning',
|
||||
'error' => 'danger',
|
||||
'critical' => 'danger',
|
||||
'alert' => 'danger',
|
||||
'debug' => 'info',
|
||||
'info' => 'info',
|
||||
'notice' => 'info',
|
||||
'warning' => 'warning',
|
||||
'error' => 'danger',
|
||||
'critical' => 'danger',
|
||||
'alert' => 'danger',
|
||||
'emergency' => 'danger',
|
||||
];
|
||||
private static $levels_imgs = [
|
||||
'debug' => 'info',
|
||||
'info' => 'info',
|
||||
'notice' => 'info',
|
||||
'warning' => 'warning',
|
||||
'error' => 'warning',
|
||||
'critical' => 'warning',
|
||||
'alert' => 'warning',
|
||||
'debug' => 'info',
|
||||
'info' => 'info',
|
||||
'notice' => 'info',
|
||||
'warning' => 'warning',
|
||||
'error' => 'warning',
|
||||
'critical' => 'warning',
|
||||
'alert' => 'warning',
|
||||
'emergency' => 'warning',
|
||||
];
|
||||
|
||||
@@ -42,8 +43,7 @@ class LaravelLogViewer
|
||||
/**
|
||||
* @param string $file
|
||||
*/
|
||||
public static function setFile($file)
|
||||
{
|
||||
public static function setFile($file) {
|
||||
$file = self::pathToLogFile($file);
|
||||
|
||||
if (File::exists($file)) {
|
||||
@@ -51,15 +51,14 @@ class LaravelLogViewer
|
||||
}
|
||||
}
|
||||
|
||||
public static function pathToLogFile($file)
|
||||
{
|
||||
public static function pathToLogFile($file) {
|
||||
$logsPath = storage_path('logs');
|
||||
|
||||
if (File::exists($file)) { // try the absolute path
|
||||
return $file;
|
||||
}
|
||||
|
||||
$file = $logsPath.'/'.$file;
|
||||
$file = $logsPath . '/' . $file;
|
||||
|
||||
// check if requested file is really in the logs directory
|
||||
if (dirname($file) !== $logsPath) {
|
||||
@@ -72,17 +71,15 @@ class LaravelLogViewer
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function getFileName()
|
||||
{
|
||||
public static function getFileName() {
|
||||
return basename(self::$file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function all()
|
||||
{
|
||||
$log = [];
|
||||
public static function all() {
|
||||
$log = array();
|
||||
|
||||
$log_levels = self::getLogLevels();
|
||||
|
||||
@@ -96,17 +93,15 @@ class LaravelLogViewer
|
||||
self::$file = $log_file[0];
|
||||
}
|
||||
|
||||
if (File::size(self::$file) > self::MAX_FILE_SIZE) {
|
||||
return;
|
||||
}
|
||||
if (File::size(self::$file) > self::MAX_FILE_SIZE)
|
||||
return null;
|
||||
|
||||
$file = File::get(self::$file);
|
||||
|
||||
preg_match_all($pattern, $file, $headings);
|
||||
|
||||
if (!is_array($headings)) {
|
||||
if (!is_array($headings))
|
||||
return $log;
|
||||
}
|
||||
|
||||
$log_data = preg_split($pattern, $file);
|
||||
|
||||
@@ -117,38 +112,38 @@ class LaravelLogViewer
|
||||
foreach ($headings as $h) {
|
||||
for ($i = 0, $j = count($h); $i < $j; $i++) {
|
||||
foreach ($log_levels as $level_key => $level_value) {
|
||||
if (strpos(strtolower($h[$i]), '.'.$level_value)) {
|
||||
preg_match('/^\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\].*?(\w+)\.'.$level_key.': (.*?)( in .*?:[0-9]+)?$/', $h[$i], $current);
|
||||
if (strpos(strtolower($h[$i]), '.' . $level_value)) {
|
||||
|
||||
if (!isset($current[3])) {
|
||||
preg_match('/^\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\].*?(\w+)\.' . $level_key . ': (.*?)( in .*?:[0-9]+)?$/', $h[$i], $current);
|
||||
|
||||
if (!isset($current[3]))
|
||||
continue;
|
||||
}
|
||||
|
||||
$array = explode(':-:-:-', $current[3]);
|
||||
$message = $current[3];
|
||||
$context = $current[2];
|
||||
|
||||
|
||||
if (is_array($array)) {
|
||||
if (array_key_exists(0, $array)) {
|
||||
$message = $array[0];
|
||||
}
|
||||
if (array_key_exists(1, $array)) {
|
||||
$context = $array[1];
|
||||
} else {
|
||||
}else{
|
||||
$context = $current[2];
|
||||
}
|
||||
}
|
||||
//dd($current);
|
||||
$log[] = [
|
||||
'context' => $context,
|
||||
'level' => $level_value,
|
||||
$log[] = array(
|
||||
'context' => $context,
|
||||
'level' => $level_value,
|
||||
'level_class' => self::$levels_classes[$level_value],
|
||||
'level_img' => self::$levels_imgs[$level_value],
|
||||
'date' => self::date($current[1]),
|
||||
'text' => $message,
|
||||
'in_file' => isset($current[4]) ? $current[4] : null,
|
||||
'stack' => preg_replace("/^\n*/", '', $log_data[$i]),
|
||||
];
|
||||
'level_img' => self::$levels_imgs[$level_value],
|
||||
'date' => self::date($current[1]),
|
||||
'text' => $message,
|
||||
'in_file' => isset($current[4]) ? $current[4] : null,
|
||||
'stack' => preg_replace("/^\n*/", '', $log_data[$i])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -159,12 +154,10 @@ class LaravelLogViewer
|
||||
|
||||
/**
|
||||
* @param bool $basename
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getFiles($basename = false)
|
||||
{
|
||||
$files = glob(storage_path().'/logs/*');
|
||||
public static function getFiles($basename = false) {
|
||||
$files = glob(storage_path() . '/logs/*');
|
||||
$files = array_reverse($files);
|
||||
$files = array_filter($files, 'is_file');
|
||||
if ($basename && is_array($files)) {
|
||||
@@ -172,24 +165,20 @@ class LaravelLogViewer
|
||||
$files[$k] = basename($file);
|
||||
}
|
||||
}
|
||||
|
||||
return array_values($files);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private static function getLogLevels()
|
||||
{
|
||||
$class = new ReflectionClass(new LogLevel());
|
||||
|
||||
private static function getLogLevels() {
|
||||
$class = new ReflectionClass(new LogLevel);
|
||||
return $class->getConstants();
|
||||
}
|
||||
|
||||
public static function date($utc)
|
||||
{
|
||||
public static function date($utc) {
|
||||
$system_date = UTC::usertimezone($utc);
|
||||
|
||||
return $system_date;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -4,8 +4,8 @@ namespace App\FaveoLog;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class LaravelLogViewerServiceProvider extends ServiceProvider
|
||||
{
|
||||
class LaravelLogViewerServiceProvider extends ServiceProvider {
|
||||
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
@@ -18,17 +18,17 @@ class LaravelLogViewerServiceProvider extends ServiceProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
public function boot() {
|
||||
if (method_exists($this, 'package')) {
|
||||
$this->package('rap2hpoutre/laravel-log-viewer', 'laravel-log-viewer', __DIR__.'/../../');
|
||||
$this->package('rap2hpoutre/laravel-log-viewer', 'laravel-log-viewer', __DIR__ . '/../../');
|
||||
}
|
||||
|
||||
$view_path = app_path().DIRECTORY_SEPARATOR.'FaveoLog'.DIRECTORY_SEPARATOR.'views';
|
||||
$this->loadViewsFrom($view_path, 'log');
|
||||
|
||||
$lang_path = app_path().DIRECTORY_SEPARATOR.'FaveoLog'.DIRECTORY_SEPARATOR.'lang';
|
||||
$this->loadTranslationsFrom($lang_path, 'log');
|
||||
$view_path = app_path() . DIRECTORY_SEPARATOR . 'FaveoLog' . DIRECTORY_SEPARATOR . 'views';
|
||||
$this->loadViewsFrom($view_path, 'log');
|
||||
|
||||
$lang_path = app_path() . DIRECTORY_SEPARATOR . 'FaveoLog' . DIRECTORY_SEPARATOR . 'lang';
|
||||
$this->loadTranslationsFrom($lang_path, "log");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,8 +36,7 @@ class LaravelLogViewerServiceProvider extends ServiceProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
public function register() {
|
||||
// Add routes
|
||||
$routes = app_path('/FaveoLog/routes.php');
|
||||
if (file_exists($routes)) {
|
||||
@@ -50,8 +49,8 @@ class LaravelLogViewerServiceProvider extends ServiceProvider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return [];
|
||||
public function provides() {
|
||||
return array();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,38 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\FaveoLog\controllers;
|
||||
|
||||
use App\FaveoLog\LaravelLogViewer;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use App\FaveoLog\LaravelLogViewer;
|
||||
|
||||
class LogViewerController extends Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
|
||||
if (Request::input('l')) {
|
||||
//dd(base64_decode(Request::input('l')));
|
||||
LaravelLogViewer::setFile(base64_decode(Request::input('l')));
|
||||
|
||||
}
|
||||
|
||||
if (Request::input('dl')) {
|
||||
return Response::download(LaravelLogViewer::pathToLogFile(base64_decode(Request::input('dl'))));
|
||||
} elseif (Request::has('del')) {
|
||||
File::delete(LaravelLogViewer::pathToLogFile(base64_decode(Request::input('del'))));
|
||||
|
||||
return Redirect::to(Request::url());
|
||||
}
|
||||
|
||||
$logs = LaravelLogViewer::all();
|
||||
|
||||
return View::make('log::log', [
|
||||
'logs' => $logs,
|
||||
'files' => LaravelLogViewer::getFiles(true),
|
||||
'current_file' => LaravelLogViewer::getFileName(),
|
||||
'logs' => $logs,
|
||||
'files' => LaravelLogViewer::getFiles(true),
|
||||
'current_file' => LaravelLogViewer::getFileName()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'logs' => 'Logs',
|
||||
'logs'=>'Logs',
|
||||
];
|
||||
|
@@ -4,6 +4,7 @@ Breadcrumbs::register('logs', function ($breadcrumbs) {
|
||||
$breadcrumbs->parent('setting');
|
||||
$breadcrumbs->push('System Logs', route('logs'));
|
||||
});
|
||||
Route::group(['middleware' => ['web', 'auth', 'roles']], function () {
|
||||
Route::group(['middleware' => ['web', 'auth', 'roles']], function() {
|
||||
Route::get('logs', ['as' => 'logs', 'uses' => 'App\FaveoLog\controllers\LogViewerController@index']);
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user