承接 jeevanjoshi/laravel-audit-trail 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

jeevanjoshi/laravel-audit-trail

最新稳定版本:v1.0.2

Composer 安装命令:

composer require jeevanjoshi/laravel-audit-trail

包简介

Automatic model change tracking with revert capability for Laravel

README 文档

README

A powerful, zero-configuration audit trail package for Laravel. Automatically tracks every create, update, and delete on your Eloquent models with a beautiful built-in dashboard.

Features

  • Automatic model change tracking — just add one trait
  • Records old and new values for every change
  • Captures who made the change, from which IP, and when
  • Beautiful built-in dashboard at /audit-trail
  • One-click revert to any previous state
  • Expandable diff view for changes
  • Filterable by model, action, user, date range
  • Fully configurable via config file
  • Excludes sensitive fields like passwords automatically
  • Works with any model — User, Invoice, Order, anything

Requirements

  • PHP 8.1 or higher
  • Laravel 9 to 12

Installation

Install via Composer:

composer require jeevanjoshi/laravel-audit-trail

The package will be auto-discovered by Laravel. No manual configuration needed.

Setup

1. Publish and run the migration

php artisan vendor:publish --tag=audit-trail-migrations
php artisan migrate

This creates the audit_trails table in your database.

2. Add the trait to any model you want to track

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Jeevanjoshi\LaravelAuditTrail\Traits\HasAuditTrail;

class User extends Model
{
    use HasAuditTrail;
}

That's it. Every create, update, and delete on this model is now tracked automatically.

Dashboard

Visit the audit trail dashboard at: https://your-app.com/audit-trail

The dashboard shows:

  • Total changes, today's changes, deletions, active users
  • Full change history with old and new values
  • Filters by model, action, model ID, and date range
  • Revert button to restore any previous state

By default the dashboard is protected by auth middleware. Make sure your app has authentication set up.

Querying Audit History

// Get all audit history for a specific record
$user->audits()->get();

// Get only updates
$user->audits()->ofAction('updated')->get();

// Get latest audit
$user->latestAudit();

// Check if model has any history
$user->hasAuditHistory();

// Get paginated history
$user->audits()->latest()->paginate(20);

Reverting Changes

// Revert a record to its previous state
$audit = $user->audits()->latest()->first();
$user->revertTo($audit->id);

// Returns true on success, false on failure

Silent Updates (without logging)

// This update will NOT be logged
$user->withoutAudit(function () use ($user) {
    $user->update(['last_seen_at' => now()]);
});

Useful for updates that aren't meaningful — like updating timestamps, counters, or cache fields.

Excluding Fields Per Model

class User extends Model
{
    use HasAuditTrail;

    // These fields will never be logged for this model
    protected array $auditExclude = [
        'two_factor_secret',
        'last_seen_at',
    ];
}

Configuration

Publish the config file:

php artisan vendor:publish --tag=audit-trail-config

This creates config/audit-trail.php in your application:

return [
    // Enable or disable the package entirely
    'enabled' => env('AUDIT_TRAIL_ENABLED', true),

    // Your user model
    'user_model' => env('AUDIT_TRAIL_USER_MODEL', 'App\Models\User'),

    // Dashboard URL prefix
    // Default: your-app.com/audit-trail
    'route_prefix' => env('AUDIT_TRAIL_ROUTE_PREFIX', 'audit-trail'),

    // Middleware protecting the dashboard
    'middleware' => ['web', 'auth'],

    // Fields never logged across ALL models
    'exclude_fields' => [
        'password',
        'remember_token',
        'two_factor_secret',
        'two_factor_recovery_codes',
        'updated_at',
    ],

    // Auto delete logs older than X days (null = keep forever)
    'keep_for_days' => env('AUDIT_TRAIL_KEEP_DAYS', null),

    // Records per page on dashboard
    'per_page' => env('AUDIT_TRAIL_PER_PAGE', 20),

    // Dashboard title
    'dashboard_title' => env('AUDIT_TRAIL_TITLE', 'Audit Trail'),
];

Customizing the Dashboard UI

Publish the views to customize them:

php artisan vendor:publish --tag=audit-trail-views

This copies the views to resources/views/vendor/audit-trail/ in your application. Edit them freely — they won't be overwritten when you update the package.

Environment Variables

Add these to your .env to configure without touching the config file:

AUDIT_TRAIL_ENABLED=true
AUDIT_TRAIL_ROUTE_PREFIX=audit-trail
AUDIT_TRAIL_KEEP_DAYS=90
AUDIT_TRAIL_PER_PAGE=20
AUDIT_TRAIL_TITLE=Audit Trail

Real World Use Cases

  • Hospital systems — track who changed patient records and when
  • Financial apps — full audit log of every transaction change
  • SaaS apps — show teams what changed in their account
  • eCommerce — track order and inventory changes
  • HR systems — log every change to employee records
  • Any app — know exactly what changed, who changed it, and when

Available Scopes

// Filter by action
Audit::ofAction('created')->get();
Audit::ofAction('updated')->get();
Audit::ofAction('deleted')->get();

// Filter by model
Audit::forModel(User::class)->get();

// Filter by user
Audit::byUser($userId)->get();

// Filter by date
Audit::today()->get();
Audit::thisMonth()->get();

Security

The dashboard is protected by auth middleware by default. To add additional protection:

// config/audit-trail.php
'middleware' => ['web', 'auth', 'can:view-audit-trail'],

Sensitive fields like password and remember_token are never logged regardless of configuration.

Testing

composer test

Cleaning Old Logs

Run the cleanup command manually:

php artisan audit-trail:clean

The command will:

  • Check how many logs are older than keep_for_days
  • Ask for confirmation before deleting
  • Show how many records were deleted

Changelog

v1.0.0

  • Initial release
  • Automatic model change tracking
  • Built-in dashboard with filters
  • Revert to previous state
  • Configurable excluded fields
  • Per-model field exclusions
  • Silent updates with withoutAudit()

License

MIT License. See LICENSE for more information.

Author

Jeevan Joshi

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固