Система логирования действий

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Система логирования действий

Сообщение Hoting »

Здравствуйте,

Собственно вопрос в заголовке, хочу настроить на проекте систему логирования действий пользователя, желательно простенькую. Все действующие скрипты очень сложны в реализации, хочется что то простое и функциональное, для фиксирование действий пользователя в системе.

$this->logadd($iduser, $time, $ip, $coment);

Кто как решает эту задачу?
PS смотрел готовые модули, они очень сложны и функциональны с возможностью отката и т.д. мне такое не нужно, просто нужно понимать что делают пользователи!
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Система логирования действий

Сообщение skynin »

Поцепить на beforeAction базового контроллера событие

Код: Выделить всё

'class' => 'yii\web\Controller',
 'on beforeAction' => function ($event) {
          $this->logadd($iduser, $time, $ip, $coment);
    },
Или создать базовый контроллер, от которого наследовать свои:

Код: Выделить всё

class MyController extends \yii\web\Controller {
    public function beforeAction($event)
    {
        $this->logadd($iduser, $time, $ip, $coment);
        return parent::beforeAction($event);
    }
}
по идее можно и не наследоваться

Код: Выделить всё

Yii::$classMap = array_merge(Yii::$classMap,[
                '\yii\web\Controller'=>'какой\там\у\вас\путь\MyController ',
            ]);
с рестовыми контроллерами тоже самое
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Система логирования действий

Сообщение Alexum »

В каком виде нужна нужна информация, кем и для чего будет использоваться? Если для вашего же использования ошибки отлавливать, то есть встроенный в yii логгер который, можно настраивать на разные уровни https://www.yiiframework.com/doc/guide/ ... me-logging. Если журнал для аудиторов, то им может быть важнее видеть какие манипуляции с моделями осуществлял пользователь, чем его переходы между страницами. В таком случае можно вызывать запись в журнал внутри метода afterSave($insert, $changedAttributes) модели и передавать в журнал. Можно писать журнал в БД в отдельную таблицу. Возможные поля:
- id модели в которой произошло изменение,
- название таблицы модели
- action, при котором произошло изменение модели
- id пользователя,
- datetime изменений,
поле под сериализованный массив изменённых. В массиве сохраняется только название изменённого атрибута, значение до изменений и значение после изменений:

Код: Выделить всё

[
'имя' => ['Пётр','Иван'],
'фамилия' => ['Петров','Иванов'],
'зарплата=> ['20000','30000'],
]
Выгрузка из такого журнала очень наглядно показывает кто чем промышлял.
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Система логирования действий

Сообщение Hoting »

skynin писал(а): 2018.06.24, 12:59 Поцепить на beforeAction базового контроллера событие

Код: Выделить всё

'class' => 'yii\web\Controller',
 'on beforeAction' => function ($event) {
          $this->logadd($iduser, $time, $ip, $coment);
    },
Или создать базовый контроллер, от которого наследовать свои:

Код: Выделить всё

class MyController extends \yii\web\Controller {
    public function beforeAction($event)
    {
        $this->logadd($iduser, $time, $ip, $coment);
        return parent::beforeAction($event);
    }
}
по идее можно и не наследоваться

Код: Выделить всё

Yii::$classMap = array_merge(Yii::$classMap,[
                '\yii\web\Controller'=>'какой\там\у\вас\путь\MyController ',
            ]);
с рестовыми контроллерами тоже самое
Насколько я понимаю, это только позволит отслеживать движение по сайту и некоторые операции ... моя же идея чтоб в любом месте я мог вызвать функцию и сделать запись в логах именно ту что нужно а не вызывать по окончанию действия. Или я что то неправильно понял в приведенном коде?
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Система логирования действий

Сообщение Hoting »

Alexum писал(а): 2018.06.25, 12:01 В каком виде нужна нужна информация, кем и для чего будет использоваться? Если для вашего же использования ошибки отлавливать, то есть встроенный в yii логгер который, можно настраивать на разные уровни https://www.yiiframework.com/doc/guide/ ... me-logging. Если журнал для аудиторов, то им может быть важнее видеть какие манипуляции с моделями осуществлял пользователь, чем его переходы между страницами. В таком случае можно вызывать запись в журнал внутри метода afterSave($insert, $changedAttributes) модели и передавать в журнал. Можно писать журнал в БД в отдельную таблицу. Возможные поля:
- id модели в которой произошло изменение,
- название таблицы модели
- action, при котором произошло изменение модели
- id пользователя,
- datetime изменений,
поле под сериализованный массив изменённых. В массиве сохраняется только название изменённого атрибута, значение до изменений и значение после изменений:

Код: Выделить всё

[
'имя' => ['Пётр','Иван'],
'фамилия' => ['Петров','Иванов'],
'зарплата=> ['20000','30000'],
]
Выгрузка из такого журнала очень наглядно показывает кто чем промышлял.
Цели в первую очередь аудит и разбор полетов ... а есть ли примеры или скрипты на примете?
Отслеживать ошибки это скорее как плюс...
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Система логирования действий

Сообщение skynin »

Hoting писал(а): 2018.06.25, 14:40 Насколько я понимаю, это только позволит отслеживать движение по сайту
ну да. вы же написали - хочу настроить на проекте систему логирования действий пользователя

пользователи производят действия посредством вызова методов контроллера.
Hoting писал(а): 2018.06.25, 14:40 моя же идея чтоб в любом месте я мог вызвать функцию и сделать запись в логах именно ту что нужно а не вызывать по окончанию действия.
идею не понял :)

пользователи не могут вызывать вызывать функции.
значит вы хотите логировать НЕ действия пользователей.

а если - сделать запись в логах - ну так и делайте запись в логах
Hoting писал(а): 2018.06.25, 14:40 Цели в первую очередь аудит и разбор полетов ...
аудит - чего? "разбор полетов" - каких?

"дайте ТЗ" как говорится, а то непонятно что вы хотите :)
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Система логирования действий

Сообщение yan »

тоже когда-то думал создать подобную универсальную систему логирования действий, но практика показывает, что в каждом проекте бывают свои специфические требования, так что проще создать свою, благо тут все достаточно просто, а вообще проще всего освоить встроенную систему логирования и юзать, что-то типа Yii::info('message', LogCategories::NAME)
Hoting
Сообщения: 56
Зарегистрирован: 2017.11.10, 10:49

Re: Система логирования действий

Сообщение Hoting »

yan писал(а): 2018.06.25, 16:25 тоже когда-то думал создать подобную универсальную систему логирования действий, но практика показывает, что в каждом проекте бывают свои специфические требования, так что проще создать свою, благо тут все достаточно просто, а вообще проще всего освоить встроенную систему логирования и юзать, что-то типа Yii::info('message', LogCategories::NAME)
ок... принцип понятен и ясен, но есть два обстоятельства первое - нужно смотреть активность пользователя (скажем за месяц) второе (реакция на определенные действия пользователя, скажем отправить письмо админу на критическое действие) это можно решить стандартными средствами, или я уже в дебри пошел?
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Система логирования действий

Сообщение yan »

Hoting писал(а): 2018.06.25, 16:38 первое - нужно смотреть активность пользователя (скажем за месяц)
стандартный DbTarget ид юзера не пишет в отдельное поле поэтому выбирать будет не особо эффективно, но можно перекрыть DbTarget и добавить поле

Hoting писал(а): 2018.06.25, 16:38 второе (реакция на определенные действия пользователя, скажем отправить письмо админу на критическое действие) это можно решить стандартными средствами, или я уже в дебри пошел?
а это уже совсем не связано с логгированием, это уже про систему событий - создаете для действия событие и в обработчиках события можно и в лог писать и письмо отправлять и т.п.
Ответить