# spatie/laravel-activitylog architecture

> Architecture diagram of the GitHub repository spatie/laravel-activitylog, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/spatie/laravel-activitylog
- Repository: https://github.com/spatie/laravel-activitylog

## Overview

Laravel Activitylog records user-initiated entries and automatically captures configured Eloquent model events, then stores activities in the `activity_log` table for retrieval. The main flow runs from the package’s fluent logging entry point through activity construction and persistence; a separate model-event branch detects changes and submits logs. The package also resolves causers, supports buffering and configurable log options, and provides log cleanup. Edges are limited to README statements and relationships visible in the supplied source index or excerpts; cleanup-command dispatch is not shown.

Main entry points: [`src/Support/ActivityLogger.php`](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityLogger.php) (Activity logger), [`src/Models/Concerns/LogsActivity.php`](https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Concerns/LogsActivity.php) (Model logging traits), [`src/Actions/LogActivityAction.php`](https://github.com/spatie/laravel-activitylog/blob/main/src/Actions/LogActivityAction.php) (Log action), [`src/Models/Activity.php`](https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Activity.php) (Activity model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Logging entry"]
  node_activity_facade["Activity facade<br/>[Activity.php]"]
  node_pending_log["Pending log"]
end

subgraph group_capture["Event capture"]
  node_activity_events["Activity events<br/>[ActivityEvent.php]"]
  node_model_traits["Model logging traits<br/>[LogsActivity.php]"]
  node_change_detector["Change detector<br/>[ChangeDetector.php]"]
end

subgraph group_runtime["Logging runtime"]
  node_activity_logger["Activity logger<br/>[ActivityLogger.php]"]
  node_causer_resolver["Causer resolver<br/>[CauserResolver.php]"]
  node_log_status["Logging status"]
  node_log_options["Log options<br/>[LogOptions.php]"]
  node_log_action["Log action"]
  node_activity_buffer["Activity buffer<br/>[ActivityBuffer.php]"]
  node_config_resolver["Config resolver<br/>[Config.php]"]
  node_service_provider["Service provider"]
end

subgraph group_storage["Persistence and cleanup"]
  node_activity_model["Activity model<br/>[Activity.php]"]
  node_activity_contract["Activity contract<br/>[Activity.php]"]
  node_clean_command["Cleanup command"]
  node_clean_action["Cleanup action"]
  node_activity_table[("Activity log table")]
end

node_app_user(("Laravel app"))

node_app_user -->|"starts logging"| node_activity_facade
node_activity_facade -->|"creates pending log"| node_pending_log
node_pending_log -->|"forwards calls"| node_activity_logger
node_activity_logger -->|"resolves causer"| node_causer_resolver
node_activity_logger -->|"checks status"| node_log_status
node_activity_logger -->|"gets logging action"| node_config_resolver
node_config_resolver -->|"resolves action"| node_log_action
node_log_action -->|"buffers activity"| node_activity_buffer
node_log_action -->|"saves activity"| node_activity_model
node_activity_model -->|"stores activities"| node_activity_table
node_activity_model -->|"implements"| node_activity_contract
node_app_user -->|"updates model"| node_model_traits
node_model_traits -->|"submits event log"| node_activity_logger
node_model_traits -->|"selects event types"| node_activity_events
node_model_traits -->|"filters changes"| node_change_detector
node_model_traits -->|"uses logging options"| node_log_options
node_service_provider -->|"binds service"| node_activity_logger
node_service_provider -->|"registers flushing"| node_activity_buffer
node_clean_command -.->|"dispatches cleanup"| node_clean_action
node_clean_action -->|"reads config"| node_config_resolver

click node_activity_facade "https://github.com/spatie/laravel-activitylog/blob/main/src/Facades/Activity.php"
click node_pending_log "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/PendingActivityLog.php"
click node_activity_logger "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityLogger.php"
click node_causer_resolver "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/CauserResolver.php"
click node_log_status "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityLogStatus.php"
click node_log_options "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/LogOptions.php"
click node_activity_model "https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Activity.php"
click node_activity_contract "https://github.com/spatie/laravel-activitylog/blob/main/src/Contracts/Activity.php"
click node_activity_events "https://github.com/spatie/laravel-activitylog/blob/main/src/Enums/ActivityEvent.php"
click node_model_traits "https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Concerns/LogsActivity.php"
click node_change_detector "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ChangeDetector.php"
click node_log_action "https://github.com/spatie/laravel-activitylog/blob/main/src/Actions/LogActivityAction.php"
click node_activity_buffer "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityBuffer.php"
click node_config_resolver "https://github.com/spatie/laravel-activitylog/blob/main/src/Support/Config.php"
click node_service_provider "https://github.com/spatie/laravel-activitylog/blob/main/src/ActivitylogServiceProvider.php"
click node_clean_command "https://github.com/spatie/laravel-activitylog/blob/main/src/Commands/CleanActivitylogCommand.php"
click node_clean_action "https://github.com/spatie/laravel-activitylog/blob/main/src/Actions/CleanActivityLogAction.php"
click node_activity_table "https://github.com/spatie/laravel-activitylog/blob/main/database/migrations/create_activity_log_table.php.stub"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_activity_facade,node_pending_log toneBlue
class node_activity_events,node_model_traits,node_change_detector toneAmber
class node_activity_logger,node_causer_resolver,node_log_status,node_log_options,node_log_action,node_activity_buffer,node_config_resolver,node_service_provider toneMint
class node_activity_model,node_activity_contract,node_clean_command,node_clean_action,node_activity_table toneRose
class node_app_user toneIndigo
```

## Components

### Logging entry

- [Activity facade](https://github.com/spatie/laravel-activitylog/blob/main/src/Facades/Activity.php): `src/Facades/Activity.php`
- [Pending log](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/PendingActivityLog.php): `src/Support/PendingActivityLog.php`

### Event capture

- [Activity events](https://github.com/spatie/laravel-activitylog/blob/main/src/Enums/ActivityEvent.php): `src/Enums/ActivityEvent.php`
- [Model logging traits](https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Concerns/LogsActivity.php): `src/Models/Concerns/LogsActivity.php`
- [Change detector](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ChangeDetector.php): `src/Support/ChangeDetector.php`

### Logging runtime

- [Activity logger](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityLogger.php): `src/Support/ActivityLogger.php`
- [Causer resolver](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/CauserResolver.php): `src/Support/CauserResolver.php`
- [Logging status](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityLogStatus.php): `src/Support/ActivityLogStatus.php`
- [Log options](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/LogOptions.php): `src/Support/LogOptions.php`
- [Log action](https://github.com/spatie/laravel-activitylog/blob/main/src/Actions/LogActivityAction.php): `src/Actions/LogActivityAction.php`
- [Activity buffer](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/ActivityBuffer.php): `src/Support/ActivityBuffer.php`
- [Config resolver](https://github.com/spatie/laravel-activitylog/blob/main/src/Support/Config.php): `src/Support/Config.php`
- [Service provider](https://github.com/spatie/laravel-activitylog/blob/main/src/ActivitylogServiceProvider.php): `src/ActivitylogServiceProvider.php`

### Persistence and cleanup

- [Activity model](https://github.com/spatie/laravel-activitylog/blob/main/src/Models/Activity.php): `src/Models/Activity.php`
- [Activity contract](https://github.com/spatie/laravel-activitylog/blob/main/src/Contracts/Activity.php): `src/Contracts/Activity.php`
- [Cleanup command](https://github.com/spatie/laravel-activitylog/blob/main/src/Commands/CleanActivitylogCommand.php): `src/Commands/CleanActivitylogCommand.php`
- [Cleanup action](https://github.com/spatie/laravel-activitylog/blob/main/src/Actions/CleanActivityLogAction.php): `src/Actions/CleanActivityLogAction.php`
- [Activity log table](https://github.com/spatie/laravel-activitylog/blob/main/database/migrations/create_activity_log_table.php.stub): `database/migrations/create_activity_log_table.php.stub`

### Other components

- **Laravel app**

## Connections

- Laravel app → Activity facade: starts logging (evidence: `README.md`)
- Activity facade → Pending log: creates pending log (evidence: `src/Facades/Activity.php`)
- Pending log → Activity logger: forwards calls (evidence: `src/Support/PendingActivityLog.php`)
- Activity logger → Causer resolver: resolves causer (evidence: `src/Support/ActivityLogger.php`)
- Activity logger → Logging status: checks status (evidence: `src/Support/ActivityLogger.php`)
- Activity logger → Config resolver: gets logging action (evidence: `src/Support/ActivityLogger.php`)
- Config resolver → Log action: resolves action (evidence: `src/Support/Config.php`)
- Log action → Activity buffer: buffers activity (evidence: `src/Actions/LogActivityAction.php`)
- Log action → Activity model: saves activity (evidence: `README.md`)
- Activity model → Activity log table: stores activities (evidence: `README.md`)
- Activity model → Activity contract: implements (evidence: `src/Models/Activity.php`)
- Laravel app → Model logging traits: updates model (evidence: `README.md`)
- Model logging traits → Activity logger: submits event log (evidence: `src/Models/Concerns/LogsActivity.php`)
- Model logging traits → Activity events: selects event types (evidence: `src/Models/Concerns/LogsActivity.php`)
- Model logging traits → Change detector: filters changes (evidence: `src/Models/Concerns/LogsActivity.php`)
- Model logging traits → Log options: uses logging options (evidence: `src/Models/Concerns/LogsActivity.php`)
- Service provider → Activity logger: binds service (evidence: `src/ActivitylogServiceProvider.php`)
- Service provider → Activity buffer: registers flushing (evidence: `src/ActivitylogServiceProvider.php`)
- Cleanup command → Cleanup action: dispatches cleanup
- Cleanup action → Config resolver: reads config (evidence: `src/Actions/CleanActivityLogAction.php`)
