承接 devdabour/laravel-loggable 相关项目开发

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

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

devdabour/laravel-loggable

最新稳定版本:v1.0.6

Composer 安装命令:

composer require devdabour/laravel-loggable

包简介

Enhanced activity logging for Laravel with metadata, relationships tracking, and size management

README 文档

README

Enhanced activity logging for Laravel with metadata, relationships tracking, and size management.

Features

  • 🚀 Easy to implement activity logging
  • 📝 Customizable attribute mapping
  • 🔍 Metadata tracking (IP, User Agent)
  • 🔗 Relationship logging
  • 📊 Content size management
  • 🎯 Selective attribute logging
  • 💾 Efficient storage handling
  • 🌐 Translatable fields support
  • 📄 JSON field handling
  • 🧩 Nested JSON structure support
  • ✨ Automatic translatable field processing (v1.0.5+)
  • 🛡️ Support for Laravel 8.x, 9.x, and 10.x

Installation

You can install the package via composer:

composer require devdabour/laravel-loggable

The package will automatically register its service provider.

Configuration

Publish the configuration file:

php artisan vendor:publish --provider="Devdabour\LaravelLoggable\Providers\LoggableServiceProvider"

This will create a loggable.php configuration file in your config directory.

Database Migration

After installing the package, you need to run the migration to create the activity log table:

php artisan migrate

This will create the necessary database table for storing activity logs.

Basic Usage

  1. Add the Loggable trait to your model:
use Devdabour\LaravelLoggable\Traits\Loggable;

class Product extends Model
{
    use Loggable;

    protected static array $logAttributes = [
        'name' => 'Product Name',
        'price' => 'Price',
        'status' => 'Status',
    ];
}

Advanced Usage

Metadata Logging

Enable metadata logging to track IP address, user agent, and custom data:

class Product extends Model
{
    use Loggable;

    // Enable metadata logging
    protected static $logMetadata = true;

    // Add custom metadata
    protected static $logAdditionalData = [
        'custom_field' => 'Custom Label',
        'department' => 'Department Name'
    ];
}

Relationship Tracking

Track changes in related models:

class Product extends Model
{
    use Loggable;

    protected static $logRelationships = [
        'category' => ['id', 'name'],
        'tags' => ['id', 'name'],
        'manufacturer' => ['id', 'company_name']
    ];
}

Translatable Fields Support

If you're using Spatie's Translatable trait, Loggable will automatically handle translatable fields and log each language separately:

Note: Starting from version 1.0.5, translatable fields are processed automatically without requiring any custom methods.

Solution 1: Using the Nested Array Format (Recommended)

The most reliable way to ensure all languages are logged is to use the nested array format for your $logAttributes:

use Devdabour\LaravelLoggable\Traits\Loggable;
use Spatie\Translatable\HasTranslations;

class Phase extends Model
{
    use HasFactory;
    use Loggable;
    use HasTranslations;

    public $translatable = ['name'];

    // Define language-specific labels in a nested structure
    protected static array $logAttributes = [
        'name' => [
            'en' => 'English Name',
            'ar' => 'Arabic Name',
        ],
    ];
}

This ensures that each language translation is logged separately, regardless of the current application locale.

Solution 2: Explicitly Define JSON Fields

You can also explicitly declare your translatable fields as JSON fields:

protected static array $jsonFields = ['name', 'description'];

protected static array $logAttributes = [
    'name_en' => 'English Name',
    'name_ar' => 'Arabic Name',
];

Solution 3: No Configuration Needed (v1.0.5+)

With version 1.0.5 and above, translatable fields are automatically processed without requiring any custom methods:

use Devdabour\LaravelLoggable\Traits\Loggable;
use Spatie\Translatable\HasTranslations;

class Phase extends Model
{
    use HasFactory;
    use Loggable;
    use HasTranslations;

    public $translatable = ['name'];
    
    // That's it! All languages will be logged automatically
    // Each language will appear as "name (en)", "name (ar)", etc.
}

If you do need custom processing, you can still implement a modelCustomTapActivity method which will be called after the automatic processing.

JSON Field Handling

Loggable now supports any JSON column, not just translatable fields:

class UserSettings extends Model
{
    use Loggable;

    protected $casts = [
        'preferences' => 'json',
        'notifications' => 'json',
    ];

    // Tell Loggable which fields contain JSON data
    protected static array $jsonFields = ['preferences', 'notifications'];

    // Optional: Map specific JSON paths to readable labels
    protected static array $logAttributes = [
        'preferences' => [
            'theme' => 'UI Theme',
            'language' => 'Display Language',
        ],
        'notifications.email' => 'Email Notifications',
        'notifications.push' => 'Push Notifications',
    ];
}

Nested JSON Structures

For complex nested JSON data, Loggable automatically flattens the structure using dot notation:

// Database JSON: {"settings":{"theme":"dark","notifications":{"email":true,"push":false}}}

// Activity log will show:
// settings.theme: dark
// settings.notifications.email: true
// settings.notifications.push: false

You can provide custom labels for nested paths:

protected static array $logAttributes = [
    'settings.theme' => 'Theme Setting',
    'settings.notifications.email' => 'Email Notifications',
];

Utility Methods

The package provides several utility methods:

// Check if a string is valid JSON
$model->isJson($string);

// Get human-readable attributes
$attributes = $model->getLogAttributes();

// Get custom log name
$logName = $model->getLogName();

Changelog

1.0.5 (2025-07-18)

  • Added automatic processing of translatable fields
  • Fixed issues with modelCustomTapActivity method
  • Improved handling of translatable fields across multiple languages

1.0.4 (2025-07-18)

  • Made isJson method public for better utility access
  • Fixed accessibility issues with helper methods

1.0.3 (2025-07-18)

  • Added support for JSON field handling
  • Added nested JSON structure support
  • Enhanced mapping for complex data structures

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

The MIT License (MIT). Please see License File for more information.

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-07-18