Система логирования действий
Система логирования действий
Здравствуйте,
Собственно вопрос в заголовке, хочу настроить на проекте систему логирования действий пользователя, желательно простенькую. Все действующие скрипты очень сложны в реализации, хочется что то простое и функциональное, для фиксирование действий пользователя в системе.
$this->logadd($iduser, $time, $ip, $coment);
Кто как решает эту задачу?
PS смотрел готовые модули, они очень сложны и функциональны с возможностью отката и т.д. мне такое не нужно, просто нужно понимать что делают пользователи!
Собственно вопрос в заголовке, хочу настроить на проекте систему логирования действий пользователя, желательно простенькую. Все действующие скрипты очень сложны в реализации, хочется что то простое и функциональное, для фиксирование действий пользователя в системе.
$this->logadd($iduser, $time, $ip, $coment);
Кто как решает эту задачу?
PS смотрел готовые модули, они очень сложны и функциональны с возможностью отката и т.д. мне такое не нужно, просто нужно понимать что делают пользователи!
Re: Система логирования действий
Поцепить на 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 ',
]);
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
Re: Система логирования действий
В каком виде нужна нужна информация, кем и для чего будет использоваться? Если для вашего же использования ошибки отлавливать, то есть встроенный в yii логгер который, можно настраивать на разные уровни https://www.yiiframework.com/doc/guide/ ... me-logging. Если журнал для аудиторов, то им может быть важнее видеть какие манипуляции с моделями осуществлял пользователь, чем его переходы между страницами. В таком случае можно вызывать запись в журнал внутри метода afterSave($insert, $changedAttributes) модели и передавать в журнал. Можно писать журнал в БД в отдельную таблицу. Возможные поля:
- id модели в которой произошло изменение,
- название таблицы модели
- action, при котором произошло изменение модели
- id пользователя,
- datetime изменений,
поле под сериализованный массив изменённых. В массиве сохраняется только название изменённого атрибута, значение до изменений и значение после изменений:
Выгрузка из такого журнала очень наглядно показывает кто чем промышлял.
- id модели в которой произошло изменение,
- название таблицы модели
- action, при котором произошло изменение модели
- id пользователя,
- datetime изменений,
поле под сериализованный массив изменённых. В массиве сохраняется только название изменённого атрибута, значение до изменений и значение после изменений:
Код: Выделить всё
[
'имя' => ['Пётр','Иван'],
'фамилия' => ['Петров','Иванов'],
'зарплата=> ['20000','30000'],
]
Re: Система логирования действий
Насколько я понимаю, это только позволит отслеживать движение по сайту и некоторые операции ... моя же идея чтоб в любом месте я мог вызвать функцию и сделать запись в логах именно ту что нужно а не вызывать по окончанию действия. Или я что то неправильно понял в приведенном коде?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 ', ]);
Re: Система логирования действий
Цели в первую очередь аудит и разбор полетов ... а есть ли примеры или скрипты на примете?Alexum писал(а): ↑2018.06.25, 12:01 В каком виде нужна нужна информация, кем и для чего будет использоваться? Если для вашего же использования ошибки отлавливать, то есть встроенный в yii логгер который, можно настраивать на разные уровни https://www.yiiframework.com/doc/guide/ ... me-logging. Если журнал для аудиторов, то им может быть важнее видеть какие манипуляции с моделями осуществлял пользователь, чем его переходы между страницами. В таком случае можно вызывать запись в журнал внутри метода afterSave($insert, $changedAttributes) модели и передавать в журнал. Можно писать журнал в БД в отдельную таблицу. Возможные поля:
- id модели в которой произошло изменение,
- название таблицы модели
- action, при котором произошло изменение модели
- id пользователя,
- datetime изменений,
поле под сериализованный массив изменённых. В массиве сохраняется только название изменённого атрибута, значение до изменений и значение после изменений:Выгрузка из такого журнала очень наглядно показывает кто чем промышлял.Код: Выделить всё
[ 'имя' => ['Пётр','Иван'], 'фамилия' => ['Петров','Иванов'], 'зарплата=> ['20000','30000'], ]
Отслеживать ошибки это скорее как плюс...
Re: Система логирования действий
ну да. вы же написали - хочу настроить на проекте систему логирования действий пользователя
пользователи производят действия посредством вызова методов контроллера.
идею не понял
пользователи не могут вызывать вызывать функции.
значит вы хотите логировать НЕ действия пользователей.
а если - сделать запись в логах - ну так и делайте запись в логах
аудит - чего? "разбор полетов" - каких?
"дайте ТЗ" как говорится, а то непонятно что вы хотите
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
Re: Система логирования действий
тоже когда-то думал создать подобную универсальную систему логирования действий, но практика показывает, что в каждом проекте бывают свои специфические требования, так что проще создать свою, благо тут все достаточно просто, а вообще проще всего освоить встроенную систему логирования и юзать, что-то типа Yii::info('message', LogCategories::NAME)
Re: Система логирования действий
ок... принцип понятен и ясен, но есть два обстоятельства первое - нужно смотреть активность пользователя (скажем за месяц) второе (реакция на определенные действия пользователя, скажем отправить письмо админу на критическое действие) это можно решить стандартными средствами, или я уже в дебри пошел?yan писал(а): ↑2018.06.25, 16:25 тоже когда-то думал создать подобную универсальную систему логирования действий, но практика показывает, что в каждом проекте бывают свои специфические требования, так что проще создать свою, благо тут все достаточно просто, а вообще проще всего освоить встроенную систему логирования и юзать, что-то типа Yii::info('message', LogCategories::NAME)
Re: Система логирования действий
стандартный DbTarget ид юзера не пишет в отдельное поле поэтому выбирать будет не особо эффективно, но можно перекрыть DbTarget и добавить поле
а это уже совсем не связано с логгированием, это уже про систему событий - создаете для действия событие и в обработчиках события можно и в лог писать и письмо отправлять и т.п.