PHPackages                             kolaybi/activity-log - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. kolaybi/activity-log

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

kolaybi/activity-log
====================

Standalone activity logging package for Laravel — logs human-readable business events with i18n entry resolution.

v1.4.0(1mo ago)039↓23.8%MITPHPPHP ^8.4

Since Mar 4Pushed 1mo agoCompare

[ Source](https://github.com/kolaybi/activity-log)[ Packagist](https://packagist.org/packages/kolaybi/activity-log)[ RSS](/packages/kolaybi-activity-log/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (5)Dependencies (8)Versions (7)Used By (0)

Activity Log
============

[](#activity-log)

Standalone activity logging package for Laravel. Logs human-readable business events with i18n entry resolution, queue support, and multi-tenant context.

Requirements
------------

[](#requirements)

- PHP 8.4+
- Laravel 12+

Installation
------------

[](#installation)

```
composer require kolaybi/activity-log
```

The service provider is auto-discovered. Publish the config and migration:

```
php artisan vendor:publish --tag=activity-log-config
php artisan vendor:publish --tag=activity-log-migrations
php artisan migrate
```

Configuration
-------------

[](#configuration)

```
// config/kolaybi/activity-log.php

return [
    'model'            => \KolayBi\ActivityLog\Models\Activity::class,
    'context_provider' => null, // falls back to NullContextProvider
    'connection'       => null, // uses default database connection
    'table'            => 'activities',
    'queue'            => [
        'connection' => 'sync',
    ],
];
```

Usage
-----

[](#usage)

### Define an activity group

[](#define-an-activity-group)

Create a backed string enum implementing `ActivityGroup`:

```
use KolayBi\ActivityLog\Contracts\ActivityGroup;

enum MyActivityGroup: string implements ActivityGroup
{
    case NONE    = 'none';
    case COMPANY = 'company';
    case USER    = 'user';
}
```

### Create a concrete activity

[](#create-a-concrete-activity)

Extend `AbstractActivity`, set the `GROUP` constant, and implement `parameters()`:

```
use KolayBi\ActivityLog\AbstractActivity;

class CompanyCreatedActivity extends AbstractActivity
{
    protected const MyActivityGroup GROUP = MyActivityGroup::COMPANY;

    public function __construct(
        private readonly Company $company,
    ) {}

    protected function parameters(): array
    {
        return [
            'company_name' => $this->company->name,
            'company_type' => $this->company->company_type->value,
        ];
    }
}
```

### Log an activity

[](#log-an-activity)

```
CompanyCreatedActivity::with($company)->log();
```

The `log()` method dispatches the record creation as a queued closure. Context (creator, tenant) is resolved eagerly before dispatch, since `Auth`/`Request` aren't available inside queued closures.

### Context provider

[](#context-provider)

Implement `ActivityContextProvider` to supply creator and tenant IDs:

```
use KolayBi\ActivityLog\Contracts\ActivityContextProvider;

class MyContextProvider implements ActivityContextProvider
{
    public function creatorId(): int|string|null
    {
        return Auth::id();
    }

    public function tenantId(): int|string|null
    {
        return tenant()?->id;
    }
}
```

Register it in your config:

```
'context_provider' => \App\Providers\MyContextProvider::class,
```

Or bind it directly in a service provider:

```
$this->app->singleton(
    \KolayBi\ActivityLog\Contracts\ActivityContextProvider::class,
    \App\Providers\MyContextProvider::class,
);
```

### Entry resolution (i18n)

[](#entry-resolution-i18n)

The `Activity` model provides an `entry` attribute that resolves a human-readable string via Laravel's translation system:

```
// Translation key: activities.App\Activities\CompanyCreatedActivity
// lang/en/activities.php:
// 'App\Activities\CompanyCreatedActivity' => ':company_name (:company_type) was created.',

$activity->entry; // "Acme Corp (regular) was created."
```

Parameters that contain enum references are resolved automatically:

```
protected function parameters(): array
{
    return [
        'status' => [
            'enum'     => Status::class,
            'value'    => $this->model->status->value,
            'function' => 'label',
        ],
    ];
}
```

### Custom Activity model

[](#custom-activity-model)

Extend the package model and update the config:

```
use KolayBi\ActivityLog\Models\Activity as BaseActivity;

class Activity extends BaseActivity
{
    protected $connection = 'my_connection';

    protected function casts(): array
    {
        return array_merge(parent::casts(), [
            'group' => MyActivityGroup::class,
        ]);
    }
}
```

```
'model' => \App\Models\Activity::class,
```

Database schema
---------------

[](#database-schema)

ColumnTypeNotes`id`ULIDPrimary key`created_at`Timestamp`updated_at`Timestamp`deleted_at`TimestampSoft deletes`tenant_id`String (nullable)Indexed`creator_id`String (nullable)Indexed`group`StringIndexed`type`StringIndexed, activity class FQCN`parameters`JSONTranslation parametersTesting
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](https://github.com/kolaybi/.github/blob/master/CONTRIBUTING.md) for details.

License
-------

[](#license)

Please see [License File](LICENSE.md) for more information.

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance92

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~6 days

Total

6

Last Release

40d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/55d848a38c4172de8d020b7ebe2a586b41c9924a2d048670a67ddd6c53268fb5?d=identicon)[kolaybi](/maintainers/kolaybi)

---

Top Contributors

[![uguurozkan](https://avatars.githubusercontent.com/u/6731054?v=4)](https://github.com/uguurozkan "uguurozkan (24 commits)")

---

Tags

activity-logauditeventsi18nlaravelloggingpackagelaravelloggingi18neventsAuditactivity-log

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/kolaybi-activity-log/health.svg)

```
[![Health](https://phpackages.com/badges/kolaybi-activity-log/health.svg)](https://phpackages.com/packages/kolaybi-activity-log)
```

###  Alternatives

[muhammadsadeeq/laravel-activitylog-ui

A beautiful, modern UI for Spatie's Activity Log with advanced filtering, analytics, and real-time features.

17510.1k](/packages/muhammadsadeeq-laravel-activitylog-ui)[noxoua/filament-activity-log

A Laravel package that simplifies activity logging in the Filament admin panel, with support for logging create, update, delete, and restore actions. It integrates with the 'spatie/laravel-activitylog' package and includes a modernized activity log viewing page.

7151.5k](/packages/noxoua-filament-activity-log)[tatter/audits

Lightweight object logging for CodeIgniter 4

1320.1k3](/packages/tatter-audits)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
