Везде и всюду вставлять Log($model); - это не правильный ход. Логика размазывается по всем моделям.
Лучше написать отдельные модуль и с помощью
событийвсе решить.
Как пример..
в компоненте модуля логов, который подключаю в конфиге примерно вот так
'logs' => [
'class' => common\modules\logs\components\Log::className(),
],
пишу...
namespace common\modules\logs\components;
class Log extends Event
{
/**
* @inheritdoc
*/
public function init()
{
// Слушаем события моделей. Если событие произошло, то обрабатываем его в builderUser
self::on(User::className(), User::EVENT_AFTER_LOGIN, [$this, 'builderUser']);
self::on(User::className(), User::EVENT_BEFORE_LOGOUT, [$this, 'builderUser']);
......
функция builderUser имеет вот такой вид..
/**
* Построитель событий пользователей
*
* @param mixed $event Событие
*
* @return void
*/
public function builderUser($event = null)
{
switch ($event->name) {
case User::EVENT_AFTER_LOGIN: // Авторизация
if ($event->sender->identity->isAdmin()) { // Админ
$this->addEvents(LogEvents::EVENT_AUTHORIZATION_ADMINISTRATOR, $event->sender->identity);
} elseif ($event->sender->identity->isSeller()) { // Продавец
.....
} elseif (...) { // Другие пользователи системы
.....
}
break;
case User::EVENT_BEFORE_LOGOUT: // Выход из ЛК
if ($event->sender->identity->isAdmin()) { // Админ
$this->addEvents(LogEvents::EVENT_LOGOUT_ADMINISTRATOR, $event->sender->identity);
} elseif ($event->sender->identity->isSeller()) { // Продавец
......
}
а функция addEvents уже непосредственно записывает тип события, событие и сам лог в базу
LogEvents - это обычная моделька со списком событий и типов событий.
Код вырвал из контекста, полный список приводить нет возможности, но думаю сама суть ясна.
1) Слушаем событие модели
2) обрабатываем событие в зависимости от прав пользователя и типа события(вход, выход, осуществление покупки, удаление товара и прочее)
UPD
структура модуля