Logging activity | laravel-activitylog | Spatie       

 SPATIE  

  Laravel Activity Log 
=======================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-activitylog](https://spatie.be/docs/laravel-activitylog/v5)  Basic-usage  Logging activity

 Version   v5   v4   v3   v2   v1      

 Other versions for crawler [v5](https://spatie.be/docs/laravel-activitylog/v5) [v4](https://spatie.be/docs/laravel-activitylog/v4) [v3](https://spatie.be/docs/laravel-activitylog/v3) [v2](https://spatie.be/docs/laravel-activitylog/v2) [v1](https://spatie.be/docs/laravel-activitylog/v1) 

  Logging activity    
- [ Introduction ](https://spatie.be/docs/laravel-activitylog/v5/introduction)
- [ Support us ](https://spatie.be/docs/laravel-activitylog/v5/support-us)
- [ Requirements ](https://spatie.be/docs/laravel-activitylog/v5/requirements)
- [ Installation and Setup ](https://spatie.be/docs/laravel-activitylog/v5/installation-and-setup)
- [ Questions and issues ](https://spatie.be/docs/laravel-activitylog/v5/questions-and-issues)
- [ Changelog ](https://spatie.be/docs/laravel-activitylog/v5/changelog)
- [ Upgrading ](https://spatie.be/docs/laravel-activitylog/v5/upgrading)
- [ About us ](https://spatie.be/docs/laravel-activitylog/v5/about-us)

Basic usage
-----------

- [ Logging activity ](https://spatie.be/docs/laravel-activitylog/v5/basic-usage/logging-activity)
- [ Cleaning up the log ](https://spatie.be/docs/laravel-activitylog/v5/basic-usage/cleaning-up-the-log)

Advanced usage
--------------

- [ Logging model events ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/logging-model-events)
- [ Define causer for runtime ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/define-causer-for-runtime)
- [ Using placeholders ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/using-placeholders)
- [ Using multiple logs ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/using-multiple-logs)
- [ Disabling logging ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/disabling-logging)
- [ Customizing actions ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/customizing-actions)
- [ Before logging hook ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/before-logging-hook)
- [ Buffering activities ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/buffering)
- [ Log Options ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/log-options)
- [ Causer Resolver ](https://spatie.be/docs/laravel-activitylog/v5/advanced-usage/causer-resolver)

 Logging activity
================

###  On this page 

1. [ Setting a subject ](#content-setting-a-subject)
2. [ Setting a causer ](#content-setting-a-causer)
3. [ Setting custom properties ](#content-setting-custom-properties)
4. [ Setting custom created date ](#content-setting-custom-created-date)
5. [ Setting custom event ](#content-setting-custom-event)
6. [ Tap Activity before logged ](#content-tap-activity-before-logged)

This is the most basic way to log activity:

```
activity()->log('Look mum, I logged something');
```

You can retrieve the activity using the `Spatie\Activitylog\Models\Activity` model.

```
$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->description; //returns 'Look mum, I logged something';
```

Setting a subject
-----------------------------------------------------------------------------------------------------------

You can specify on which object the activity is performed by using `performedOn()`:

```
activity()
   ->performedOn($someContentModel)
   ->log('edited');

$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->subject; //returns the model that was passed to `performedOn`;
```

The `performedOn()` method has a shorter alias: `on()`

Setting a causer
--------------------------------------------------------------------------------------------------------

You can set who or what caused the activity by using `causedBy()`:

```
activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->log('edited');

$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->causer; //returns the model that was passed to `causedBy`;
```

The `causedBy()` method has a shorter alias: `by()`

If you're not using `causedBy()`, the package will automatically use the user who is logged in when `log()` is called, not when the logger is created. Calling `tap()` resolves the default causer before its callback runs. Use `causedBy()` to keep a specific causer if authentication changes before logging.

If you don't want to associate a model as causer of activity, you can use `causedByAnonymous()` (or the shorter alias: `byAnonymous()`).

Setting custom properties
-----------------------------------------------------------------------------------------------------------------------------------

You can add arbitrary metadata to an activity by using `withProperties()`. This is separate from `attribute_changes`, which the package uses to store old/new model attribute values when [logging model events](/docs/laravel-activitylog/v5/advanced-usage/logging-model-events).

```
activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->withProperties(['key' => 'value'])
   ->log('edited');

$lastActivity = Activity::all()->last(); //returns the last logged activity

$lastActivity->getProperty('key'); //returns 'value'

Activity::where('properties->key', 'value')->get(); // get all activity where the `key` custom property is 'value'
```

Setting custom created date
-----------------------------------------------------------------------------------------------------------------------------------------

You can set a custom activity `created_at` date time by using `createdAt()`

```
activity()
    ->causedBy($userModel)
    ->performedOn($someContentModel)
    ->createdAt(now()->subDays(10))
    ->log('created');
```

Setting custom event
--------------------------------------------------------------------------------------------------------------------

You can set a custom activity `event` by using `event()`

```
activity()
    ->causedBy($userModel)
    ->performedOn($someContentModel)
    ->event('verified')
    ->log('The user has verified the content model.');
```

Tap Activity before logged
--------------------------------------------------------------------------------------------------------------------------------------

You can use the `tap()` method to fill properties and add custom fields before the activity is saved.

The causer is available inside the callback, and changes to it are preserved when the activity is logged.

```
use Spatie\Activitylog\Contracts\Activity as ActivityContract;

activity()
   ->causedBy($userModel)
   ->performedOn($someContentModel)
   ->tap(function(ActivityContract $activity) {
      $activity->my_custom_field = 'my special value';
   })
   ->log('edited');

$lastActivity = Activity::all()->last();

$lastActivity->my_custom_field; // returns 'my special value'
```

 A good
match?
-------------

### What we do best

- All things Laravel
- Custom frontend components
- Building APIs
- AI-powered features
- Simplifying things
- Clean solutions
- Integrating services

### Not our cup of tea

- WordPress themes
- Cutting corners
- Free mockups to win a job
- "Just execute the briefing"

 In short: we'd like to be a **substantial part** of your project.

 [ Get in touch via email ](mailto:info@spatie.be?subject=A%20good%20match%21&body=Tell%20us%20as%20much%20as%20you%20can%20about%0A-%20your%20online%20project%0A-%20your%20planning%0A-%20your%20budget%0A-%20%E2%80%A6%0A%0AAnything%20that%20helps%20us%20to%20start%20straightforward%21)
