Installation:
composer require maxsky/lumen-log-viewer
Register Service Provider in bootstrap/app.php (Lumen 8+):
$app->register(\LumenLogViewer\Providers\LumenLogViewerServiceProvider::class);
(For Lumen 5.x, use app/Providers/AppServiceProvider.php as per the README.)
Add Route in routes/web.php:
$router->get('logs', '\LumenLogViewer\Controllers\LogViewerController@index');
Access Logs:
Visit /logs (or your custom route) to view formatted logs in a simple UI.
Log Integration:
storage/logs/lumen.log).Customization:
vendor/maxsky/lumen-log-viewer/views/logviewer.blade.php to resources/views/vendor/lumen-log-viewer/logviewer.blade.php.
Example modification:
<pre>{{ print_r($logs, true) }}</pre> <!-- Replace with custom rendering -->
$router->group(['middleware' => 'auth'], function () use ($router) {
$router->get('logs', 'LogViewerController@index');
});
Log Filtering:
LogViewerController) fetches logs via LogViewerService. Extend the service to add filters:
// In a custom service provider
$this->app->bind('LumenLogViewer\Services\LogViewerService', function ($app) {
return new CustomLogViewerService($app['log']);
});
Security:
/logs endpoint using middleware (e.g., auth or admin checks).LogViewerService to merge rotated logs:
public function getLogs()
{
$logs = [];
foreach (glob(storage_path('logs/lumen*.log')) as $file) {
$logs = array_merge($logs, $this->readLogFile($file));
}
return $logs;
}
Lumen Version Mismatch:
$this->app->register() vs. $app->register()).Log File Permissions:
www-data) has read access to storage/logs/. Run:
chmod -R 755 storage/logs/
Missing Logs:
storage/logs/lumen.log (check bootstrap/app.php).Blade Template Caching:
php artisan view:clear
Log the Logs:
dd($this->logViewerService->getLogs());
Check Service Binding:
LogViewerService is bound correctly. Add this to AppServiceProvider:
$this->app->singleton('LumenLogViewer\Services\LogViewerService', function ($app) {
return new \LumenLogViewer\Services\LogViewerService($app['log']);
});
Route Debugging:
php artisan route:list
Custom Log Sources:
public function getLogs()
{
return DB::table('logs')->get()->toArray();
}
Log Formatting:
@foreach($logs as $log)
<div class="log-entry {{ $log['level'] === 'ERROR' ? 'error' : '' }}">
{{ $log['message'] }}
</div>
@endforeach
API Endpoint:
$router->get('logs/api', 'LogViewerController@api');
Update the controller:
public function api()
{
return response()->json($this->logViewerService->getLogs());
}
Search Functionality:
public function index(Request $request)
{
$search = $request->input('search');
$logs = $this->logViewerService->getLogs($search);
return view('vendor.lumen-log-viewer.logviewer', compact('logs'));
}
How can I help you explore Laravel packages today?