PHPackages                             jrazer/yii2-logger - 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. jrazer/yii2-logger

ActiveYii2-extension[Logging &amp; Monitoring](/categories/logging)

jrazer/yii2-logger
==================

Tools to store activity log for Yii2

00PHPCI failing

Since Apr 20Pushed 6y ago1 watchersCompare

[ Source](https://github.com/jRazer/yii2-logger)[ Packagist](https://packagist.org/packages/jrazer/yii2-logger)[ RSS](/packages/jrazer-yii2-logger/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

yii2-logger
===========

[](#yii2-logger)

Установка расширения
--------------------

[](#установка-расширения)

```
~$ composer require --prefer-dist jrazer/yii2-logger
```

Миграции
--------

[](#миграции)

Для начала нужно настроить `MigrateController`:

```
return [
    'controllerMap' => [
        'migrate' => [
            'class' => \yii\console\controllers\MigrateController::class,
            'migrationPath' => [
                '@app/migrations',
                '@vendor/jrazer/yii2-logger/migrations',
            ],
        ],
    ],
];
```

Запускаем миграции

```
~$ yii migrate
```

Подключение
-----------

[](#подключение)

Необходимо добавить в конфигурационный файл

```
return [
    'modules' => [
        /**
         * Модуль будет использоваться для просмотра логов
         */
        'logger' => [
            'class' => \jrazer\activityLogger\modules\Module::class,

            // Список моделей которые логировались
            'entityMap' => [
                'news' => 'common\models\News',
            ],
        ]
    ],
    'components' => [
        /**
         * Компонент принимает и управляет логами
         */
        'activityLogger' => [
            'class' => \jrazer\activityLogger\Manager::class,

            // Включаем логирование для PROD версии
            'enabled' => YII_ENV_PROD,

            // при вызове метода `clean()` будут удалены все данные добавленные 365 дней назад
            'deleteOldThanDays' => 365,

            // идентификатор компонента `\yii\web\User`
            'user' => 'user',

            // Поле для отображения имени из модели пользователя
            'userNameAttribute' => 'username',

            // идентификатор компонента хранилища логов `\jrazer\activityLogger\StorageInterface`
            'storage' => 'activityLoggerStorage',

            'messageClass' => [
                'class' => \jrazer\activityLogger\LogMessage::class,

                // При использовании компанета когда пользователь ещё не авторизировался его действия
                // можно записывать от имени "Неизвесный пользователь", к примеру.
                'userId' => 'cron',
                'userName' => 'Неизвесный пользователь',

                // Окружение из которого проиводило действие
                'env' => 'console',

                // Так же можно указать значение по умолчанию и для других параметров
                // 'entityId' => '...',
                // 'createdAt' => time(),
                // 'action' => '...',
                // 'data' => [" ... "],
            ],
        ],

        /**
         * Компонент принимает и управляет логами
         */
        'activityLoggerStorage' => [
            'class' => \jrazer\activityLogger\DbStorage::class,

            // Имя таблицы в которой будут хранится логи
            'tableName' => '{{%activity_log}}',

            // идентификатор компонента `\yii\db\Connection`
            'db' => 'db',
        ],
    ]
];
```

### Создаем ссылки для просмотра записанных логов

[](#создаем-ссылки-для-просмотра-записанных-логов)

```
// На этой странице можно просмотреть все логи
Url::toRoute(['/logger/default/index']);

// На этой странице можно просмотреть журналы действий конкретного пользователя по го `$id`
Url::toRoute(['/logger/default/index', 'userId' => 1]);

// На этой странице можно просмотреть журналы действий для всех объектов "news"
Url::toRoute(['/logger/default/index', 'entityName' => 'news']);

// На этой странице можно просмотреть журналы действий для всех объектов "news" с "id" => 1
Url::toRoute(['/logger/default/index', 'entityName' => 'news', 'entityId' => 1]);
```

Пример использования для ActiveRecord модели
--------------------------------------------

[](#пример-использования-для-activerecord-модели)

```
/**
 * @mixin \jrazer\activityLogger\ActiveLogBehavior
 */
class News extends ActiveRecord
{
    public function transactions()
    {
        return [
            ActiveRecord::SCENARIO_DEFAULT => ActiveRecord::OP_ALL,
        ];
    }

    public function behaviors()
    {
        return [
            [
                'class' => \jrazer\activityLogger\ActiveLogBehavior::class,

                // Если необхадимо изменить стандартное значение `entityName`
                'getEntityName' => function () {
                    return static::tableName();
                },
                // Если необхадимо изменить стандартное значение `entityId`
                'getEntityId' => function () {
                    return $this->getPrimaryKey();
                }
                /**
                 * В случаях когда нужно для конкретного ActiveLogBehavior делать подпись с понятным названием.
                 */
                'beforeSaveMessage' => function ($data) {
                    return ['attribute' => 'custom data'] + $data;
                }

                // Список полей за изменением которых будет производиться слежение
                'attributes' => [
                    // Простые поля ( string|int|bool )
                    'name',

                    // Поля значение которого можно найти в списке.
                    // в данном случае `$model->getStatusList()[$model->status]`
                    'status' => [
                        'list' => 'statusList',
                    ],

                    // Поле значение которого является `id` связи с другой моделью
                    'template_id' => [
                        'relation' => 'template',
                        // Поле из связанной таблицы которое будет использовано в качестве отображаемого значения
                        'attribute' => 'name',
                    ],
                ]
            ],
            [
                /**
                 * В случаях когда нужно для всех логов делать подпись с понятным названием.
                 * Если на странице выводятся история изменения всех пользователей,
                 * то невсегда понятно у кого именно изменился статут, день рождения или другие данные
                 */
                'class' => \jrazer\activityLogger\LogInfoBehavior::class,
                'template' => '{username} ({profile.email})',
            ],
        ];
    }

    /**
     * Если необхадимо форматировать отобоажемое значение
     * Можно указать любой поддерживаемый формат компонентом `\yii\i18n\Formatter`
     * или использовать произвольную функцию
     * @return array
     */
    public function attributeFormats()
    {
        return [
            // Значение аттрибуда будет форматироваться с помощью Yii::$app->formatter->asDatetime($value);
            'published_at' => 'datetime',

            // Можно использовать свою функцию обратного вызова
            'is_published' => function($value) {
                return Yii::$app->formatter->asBoolean($value);
            },

            // Если нужно вывести имени картинки и ссылку на неё
            'image' => function($value) {
                if (empty($value)) { return null; }

                $url = "https://cdn.site.com/img/{$value}";
                return Html::a($value, $url, ['target' => '_blank']);
            }
        ];
    }

    /**
     * В процессе работы `\jrazer\activityLogger\ActiveLogBehavior` вызывает событие
     * [[ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE]] - перед записью логов
     * [[ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE]] - после записи логов
     */
    public function init()
    {
        parent::init();

        // Регистрируем обработчики событий
        $this->on(ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE,
            function (\jrazer\activityLogger\MessageEvent $event) {
                // Вы можете добавить в список логов свою информацию
                $event->logData[] = 'Reset password';
            });

        $this->on(ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE,
            function (\yii\base\Event $event) {
                // Какие-то действия после записи логов
            });
    }

    /*
     * В место регистрации события можно создать однаименный метод который будет вызываться вместо события
     */

    /**
     * Будет вызываться в место события [[ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE]]
     * @return array
     */
    public function beforeSaveMessage($data)
    {
        // Вы можете добавить в список логов свою информацию
        $data[] = 'Reset password';

        // или заменить отображаемое значение в логах для атрибута `password_hash`
        $data['password_hash'] = 'Reset password';

        return $data;
    }

    /**
     * Будет вызываться в место события [[ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE]]
     */
    public function afterSaveMessage()
    {
        // Какие-то действия после записи логов
    }
}
```

Добавим консольный контроллер для очистки логов
-----------------------------------------------

[](#добавим-консольный-контроллер-для-очистки-логов)

```
return [
    'controllerMap' => [
        'logger' => [
            'class' => \jrazer\activityLogger\console\DefaultController::class
        ]
    ],
];
```

Теперь можно периодически чистить устаревшие логи выполняя команду из консоли

```
~$ yii logger/clean
# => Deleted 5 record(s) from the activity log.
```

### Используя параметры командной строки

[](#используя-параметры-командной-строки)

- `--entity-id, -eid`: string. Идентификатор целевого объекта
- `--entity-name, -e`: string. Псевдоним имени целевого объекта
- `--user-id, -uid`: string. Идентификатор пользователя, который выполнил действие
- `--log-action, -a`: string. Действие, которое было произведено над объектом
- `--env`: string. Среда, из которой производилось действие
- `--old-than, -o`: string. Для удаления данные старше N Допустивые значения: 1h - старше 1 часа, 2d - старше 2 дней, 3m - старше 3-х месяцев, 4y - старше 4 лет. При этом параметр deleteOldThanDays будет проигнорирован.

Например если вы хотите удалить старые запись из логов для консольного окружения, для этого вы можете использовать следующую команду:

```
~$ yii logger/clean --env=console --old-than=30d

```

Ручное использование компонента
-------------------------------

[](#ручное-использование-компонента)

### Добавление логов

[](#добавление-логов)

Пригодится в тех случаях когда в процессе работы приложения не используются ActiveRecord модели. Например при отправке отчетов, скачивании файлов, работа с внешним API, и т.д

```
    // имя сущности
    $entityName = 'user';
    // id сущности с которой производится действие
    $entityId = 10;
    // текст с описанием действия
    $message = 'export data';

    $logger = Yii::$app->activityLogger;

    // Сохранение текстового сообщения слязанного с $entityName
    $logger->log($entityName, $message);

    // Сохранение текстового сообщения слязанного с $entityName при выполнении действия "download"
    $logger->log($entityName, $message, 'download');

    // Сохранение текстового сообщения слязанного с $entityName и $entityId при выполнении действия "send mail"
    $logger->log($entityName, $message, 'send mail', $entityId);
```

Когда в логах нужно оставить одну запись со списком выполненных действий можно воспользоваться `LogCollection`В данном примере мы записываем лог синхронизации пользователей

```
$collection = Yii::$app->activityLogger->createCollection('user');
$collection->setAction('sync');
$collection->setEntityId(100);

$messages = [
    'Created: 100',
    'Updated: 100500',
    'Deleted: 5',
];

/**
 * Добавляем все необходимые записи
 */
foreach ($messages as $message) {
    $collection->addMessage($message);
}

/**
 * Сохраняем все собранные на данный момент логи
 * Посли записи список логов будет очищен
 */
$collection->push(); // => true
```

### Удаление устаревших данных

[](#удаление-устаревших-данных)

Будут удалены все логи старше одного года. Этот параметр можно изменить в настройках компонента, указав свое значение для параметра `deleteOldThanDays`

```
Yii::$app->activityLogger->clean();
```

###  Health Score

16

—

LowBetter than 5% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/fd8c1fbfc798597c8fd8e9fb3c895a12dc35bac8eef8a85eca6e064b67684b2a?d=identicon)[jRazer](/maintainers/jRazer)

---

Top Contributors

[![jrazer](https://avatars.githubusercontent.com/u/2252869?v=4)](https://github.com/jrazer "jrazer (1 commits)")

### Embed Badge

![Health badge](/badges/jrazer-yii2-logger/health.svg)

```
[![Health](https://phpackages.com/badges/jrazer-yii2-logger/health.svg)](https://phpackages.com/packages/jrazer-yii2-logger)
```

###  Alternatives

[psr/log

Common interface for logging libraries

10.4k1.2B9.2k](/packages/psr-log)[itsgoingd/clockwork

php dev tools in your browser

5.9k27.6M94](/packages/itsgoingd-clockwork)[graylog2/gelf-php

A php implementation to send log-messages to a GELF compatible backend like Graylog2.

41838.2M138](/packages/graylog2-gelf-php)[bugsnag/bugsnag-psr-logger

Official Bugsnag PHP PSR Logger.

32132.5M2](/packages/bugsnag-bugsnag-psr-logger)[consolidation/log

Improved Psr-3 / Psr\\Log logger based on Symfony Console components.

15462.2M7](/packages/consolidation-log)[datadog/php-datadogstatsd

An extremely simple PHP datadogstatsd client

19124.6M15](/packages/datadog-php-datadogstatsd)

PHPackages © 2026

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