A simple and powerful Activity Log package for Laravel. It automatically tracks and records every user action in your admin or user panel after login β no complex setup needed.
β Tested with Laravel 8, 9, 10, 11, 12
- π Automatically logs all authenticated user activity
- π« Ignore specific routes you don't want to track
- ποΈ Auto-delete old logs based on configurable time limit
- π Built-in default view to see all logs at
/log - π οΈ Create custom logs manually with full control
- β‘ Easy installation via Composer
| Requirement | Version |
|---|---|
| PHP | >= 7.0 |
| Laravel | >= 8.x |
| Guzzle HTTP | ^7.0 |
Install the package via Composer:
composer require learncodeweb/activitylog
β οΈ Important: This package does not support Laravel's auto-discovery. You must manually register the service provider based on your Laravel version.
Open config/app.php and add inside the providers array:
/*
* Package Service Providers...
*/
Lcw\Activitylog\Providers\ActivityLogProvider::class,Laravel 11 and 12 no longer use config/app.php for providers. Instead, open bootstrap/providers.php and add:
<?php
return [
App\Providers\AppServiceProvider::class,
Lcw\Activitylog\Providers\ActivityLogProvider::class, // β
Add this line
];php artisan vendor:publish --provider="Lcw\Activitylog\Providers\ActivityLogProvider" --tag="migrations"php artisan migrateThis creates the activity_logs table in your database.
Export the config file to customize settings:
php artisan vendor:publish --provider="Lcw\Activitylog\Providers\ActivityLogProvider" --tag="config"This creates config/lcw_activity_log_config.php. Below are the available options:
<?php
return [
/*
|--------------------------------------------------------------------------
| Delete Limit
|--------------------------------------------------------------------------
| Set how many months of old logs to keep before auto-deletion.
| Default: 3 months
*/
'delete_limit' => 3,
/*
|--------------------------------------------------------------------------
| Ignore Routes
|--------------------------------------------------------------------------
| List route names or URIs where you do NOT want activity to be logged.
| Example: dashboard index, file downloads, etc.
*/
'ignore_routes' => [
'dashboard.index',
'settings.download.history.activity_log',
],
];The package automatically provides a log viewer at:
http://your-domain.com/log
Route name: lcw_activity_log_index
You can fetch logs manually and display them in your own view:
use Lcw\Activitylog\ActivityLog;
public function index(Request $request)
{
$activityLog = new ActivityLog();
$logs = $activityLog->get($request);
return view('your-view', compact('logs'));
}Delete logs older than a given number of months:
use Lcw\Activitylog\ActivityLog;
$activityLog = new ActivityLog();
// Delete logs older than 1 month
$activityLog->logDelete(1);
// Delete logs older than 3 months
$activityLog->logDelete(3);You can manually create a log entry with custom data:
use Lcw\Activitylog\ActivityLog;
$activityLog = new ActivityLog();
$activityLog->create([
'log' => 'User updated their notification settings',
'query_string' => $request->all(),
]);| Parameter | Type | Description |
|---|---|---|
log |
string |
A description of the activity |
server_ip |
string |
The server's IP address |
user_ip |
string |
The client/user's IP address |
route_detail |
array |
Array with current route path details |
query_string |
array |
Array of request parameters |
user_id |
int |
Authenticated user's ID |
user |
array |
Array of authenticated user data |
created_at |
datetime |
Custom timestamp for the log entry |
To skip logging on specific routes, publish the config (see above) and add route names or URIs to the ignore_routes array:
'ignore_routes' => [
'dashboard.index', // by route name
'api/health-check', // by URI
'settings.download.history.activity_log',
],src/
βββ ActivityLog.php # Core activity log class
βββ Providers/
β βββ ActivityLogProvider.php # Service provider
βββ Http/
β βββ Middleware/ # Auto-logging middleware
βββ Models/
β βββ ActivityLogModel.php # Eloquent model
βββ database/
β βββ migrations/ # Migration files
βββ config/
β βββ lcw_activity_log_config.php # Config file
βββ resources/
βββ views/ # Default log viewer blade templates
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Lcw\Activitylog\ActivityLog;
class ActivityLogController extends Controller
{
protected $activityLog;
public function __construct()
{
$this->activityLog = new ActivityLog();
}
// Show all activity logs
public function index(Request $request)
{
$logs = $this->activityLog->get($request);
return view('admin.activity-log', compact('logs'));
}
// Delete logs older than X months
public function deleteOld(Request $request)
{
$months = $request->input('months', 3);
$this->activityLog->logDelete($months);
return back()->with('success', 'Old logs deleted successfully!');
}
// Manually log a custom action
public function logCustomAction()
{
$this->activityLog->create([
'log' => 'Admin exported the user report',
]);
return back()->with('success', 'Action logged!');
}
}Agar aap stancl/tenancy (tenancy-for-laravel) use kar rahe hain toh neeche diye steps follow karo. Is package ki migration tenant database mein hogi aur har tenant apna alag activity log rakhega.
stancl/tenancy mein tenant migrations database/migrations/tenant/ folder mein honi chahiye.
# Pehle publish karo
php artisan vendor:publish --provider="Lcw\Activitylog\Providers\ActivityLogProvider" --tag="migrations"
# Phir tenant folder mein move karo
mv database/migrations/*_create_activity_log_master.php database/migrations/tenant/config/tenancy.php mein check karo ke tenant migrations ka path sahi set hai:
'migration_parameters' => [
'--path' => ['/database/migrations/tenant'],
'--realpath' => true,
'--force' => true,
],# Sab tenants par migrate karo
php artisan tenants:migrate
# Sirf ek specific tenant par migrate karo
php artisan tenants:migrate --tenants=your-tenant-idYeh command har tenant ke alag database mein activity_log_master table create kar degi.
Jab naya tenant create ho toh automatically migration run ho β app/Providers/TenancyServiceProvider.php mein confirm karo ke yeh configured hai:
use Stancl\Tenancy\Events;
use Stancl\Tenancy\Jobs\MigrateDatabase;
'listeners' => [
Events\TenantCreated::class => [
MigrateDatabase::class, // β
Naye tenant par auto migrate hoga
],
],Agar yeh set hai toh har naye tenant ke create hone par activity_log_master table automatically ban jayega.
stancl/tenancy automatically tenant ka database switch karta hai. Package bilkul normal tarah use karo β har tenant ka data automatically uske apne database mein jayega:
use Lcw\Activitylog\ActivityLog;
$activityLog = new ActivityLog();
// Logs fetch karo (current tenant ka database use hoga automatically)
$logs = $activityLog->get($request);
// Custom log banana
$activityLog->create([
'log' => 'User ne invoice download ki',
]);
// Purane logs delete karo
$activityLog->logDelete(3);Agar aap central panel se kisi specific tenant ka log access karna chahte hain:
use Lcw\Activitylog\ActivityLog;
$tenant = \App\Models\Tenant::find('tenant-id');
tenancy()->initialize($tenant);
$activityLog = new ActivityLog();
$logs = $activityLog->get($request);
tenancy()->end();
return view('admin.tenant-logs', compact('logs'));Tenant subdomain ya domain par default log view is URL par milega:
http://tenant1.yourdomain.com/log
Har tenant ka /log sirf usi tenant ka data dikhayega.
| Task | Command |
|---|---|
| Migration publish karo | php artisan vendor:publish --tag="migrations" |
| Migration move karo | database/migrations/tenant/ folder mein |
| Sab tenants migrate karo | php artisan tenants:migrate |
| Single tenant migrate karo | php artisan tenants:migrate --tenants=id |
| Tenant rollback karo | php artisan tenants:migrate --rollback |
| Config publish karo | php artisan vendor:publish --tag="config" |
Q: Does it log guest (unauthenticated) users?
A: No, this package is designed for logged-in users only. It works best inside admin/user panels after authentication.
Q: Can I use my own view instead of the default /log page?
A: Yes! Use $activityLog->get($request) in your controller and pass the data to your own Blade view.
Q: How do I stop certain pages from being logged?
A: Publish the config file and add those route names or URIs to the ignore_routes array.
Q: Does it work with Laravel 12?
A: Yes, but you must manually register the provider in bootstrap/providers.php β see the Register Service Provider section above.
Q: Does it support multi-tenancy with stancl/tenancy?
A: Yes! Move the published migration to database/migrations/tenant/, run php artisan tenants:migrate, and the package will work per-tenant automatically. See the Multi-Tenant Setup section for full details.
Contributions, issues, and feature requests are welcome!
Feel free to open an issue or submit a pull request.
This package is open-sourced software licensed under the MIT License.
Mian Zaid (Khalid Zaid)
π quran.ahlesunat.com
π§ zaidbinkhalid31@gmail.com
π¦ Packagist | GitHub
If this package helped you, please consider giving it a β on GitHub!