Documentation for AuditLedge — production-grade audit logs for SaaS
Add AuditLedge to a Laravel app in minutes.
composer require auditledge/auditledge-php
Register AuditLedge as a singleton in a service provider:
// app/Providers/AppServiceProvider.php
use Auditledge\AuditLedge;
public function register(): void
{
$this->app->singleton('auditledge', function () {
return new AuditLedge(env('AUDITLEDGE_API_KEY'));
});
}
Add your key to .env:
AUDITLEDGE_API_KEY=al_your_key_here
// app/Http/Controllers/InvoiceController.php
use Illuminate\Http\Request;
class InvoiceController extends Controller
{
public function destroy(Request $request, Invoice $invoice)
{
$invoice->delete();
app('auditledge')->log([
'actor' => [
'id' => (string) auth()->id(),
'name' => auth()->user()->name,
'email' => auth()->user()->email
],
'action' => 'invoice.deleted',
'resource' => [
'type' => 'invoice',
'id' => (string) $invoice->id,
'name' => $invoice->number
],
'organization_id' => (string) auth()->user()->organization_id,
'metadata' => ['ip' => $request->ip()]
]);
return redirect()->route('invoices.index');
}
}
For model-level logging, use a Laravel Observer:
// app/Observers/InvoiceObserver.php
class InvoiceObserver
{
public function deleted(Invoice $invoice): void
{
app('auditledge')->log([
'actor' => ['id' => (string) auth()->id(), 'name' => auth()->user()->name],
'action' => 'invoice.deleted',
'resource' => ['type' => 'invoice', 'id' => (string) $invoice->id],
'organization_id' => (string) $invoice->organization_id
]);
}
}
Register it in a service provider:
Invoice::observe(InvoiceObserver::class);