# Система логирования приложения

## Общее описание 

Предназначено для просмотра сообщений (событий) (как правило, об ошибках) в системе. Просмотреть лог можно в формах "Логи приложения", "Управление пользователями", "Просмотр событий". Для работы с данными формами пользователь должен обладать правами Администратора.

## Форма "Логи приложения"

С помощью данной формы можно посмотреть историю событий приложения. Чтобы открыть форму "Логи приложения", необходимо в Меню в поисковой строке ввести - "Логи приложения". Форма доступна пользователю с ролью **ECM_usersmanagement** либо **ECM_InformationSecurity**.

Откроется форма с пустой таблицей:

![alt text](media/image-6.png)

### Вкладка "Логи"

На данной вкладке отображается логирование системы.

Заполнить таблицу можно несколькими способами:

* Начало периода / Конец периода - в табличной части будут отображаться логи по заданному периоду;
* Доп.условие выборки - в данном поле возможно указать условия выборки логов, например фильтрация только по логину, либо по определенному сервису, либо исключить из выборки какой то определенный сервис;
* Выборка - из выпадающего списка возможно выбрать по какому условию отфильтровать табличную часть. Настраивается с помощью формы [Настройки выборок для логов приложения](#настройки_выборок_для_логов_приложения).

**Примеры выборки по логированию:**

* выбрать логи по логину: `"CUser" = 'DriverAuto'`,

* выбрать все по 1C: `"Service" = 'odata'`,

* выбрать все кроме 1C: `"Service" not in ('odata')`

![alt text](media/image-8.png)

В столбце "Уровень" приводится тип сообщения о событии. 

- `error` – сообщение об ошибке;
- `debug` – отладочное сообщение;
- `info` – информационное техническое сообщение;
- `MailInfo` – информационное сообщение от компоненты БД DBMail;
- `MailError` – сообщение об ошибке от компоненты БД DBMail.

В столбце "Дата" указываются дата и время возникновения сообщения.

В столбце "Пользователи" указывается пользователь, спровоцировавший возникновение события. В некоторых случаях пользователь не указывается, например если событие произошло в результате технического вмешательства.

В столбце "Сообщение" приводится краткая информация о событии. Если нажать на ссылку-текст сообщения, то откроется окно для более удобного просмотра длинного текста. То же происходит и при нажатии на ссылки в других столбцах.

![alt text](media/image-7.png)

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

В столбце "Детально" приводится детальная информация о событии, содержит дополнительные технические данные об ошибке.

В столбце "Запрос" указывается запрос к базе данных, при выполнении которого возникло событие.

В столбце "Сервис" указывается один из веб-сервисов, при выполнении которых возникло событие:

* `entrypoint` – точка входа для клиентов;
* `config` – сервис конфигурации;
* `logic` – сервис логики;
* `gate` – сервис входа (авторизации);
* `radio` – сервис взаимодействия реального времени;
* `lock` – сервис пессимистического блокировщика;
* `data`  – сервис доступа к данным и процедурам, хранимым в БД;
* `RabbitMQ` – сервер RabbitMQ служит шиной обмена данными между веб-сервисами. Сервисы используют его механизмы (сообщения и очереди сообщений) для оповещения друг друга;
* `Redis` – используется для хранения различной системной информации;
* `post` – сервис электронной почты и смс-сообщений;
* `jsreport` – предназначен для работы с отчетами jsreport;
* `lexema-dss` – для работы с ОЭП выпускаемыми клиентом;
* `preview` – предназначен для конвертации файлов в файлы в формате pdf, которые можно просматривать в элементе управления ```FilePreview```.

#### Примеры результатов логирования

- **Неудачная авторизация пользователей.** В **Доп.условие выборки** указывается: `"Message" ilike '%Неверный логин или пароль%'`

![alt text](media/image-11.png)

- **Изменение ролей для пользователя.** В **Доп.условие выборки** указывается: `"Message" ilike '%Изменение ролей для пользователя%'`

![alt text](media/image-12.png)

- **Блокирование пользователей.** В **Доп.условие выборки** указывается: `"Message" ilike '%Пользователь заблокирован. %'`

![alt text](media/image-13.png)

- **Выпуск сертификата пользователю.** В **Доп.условие выборки** указывается: `"Message" ilike '%create certificate complete%'`.

- **Логи по сертификатам.** В **Доп.условие выборки** указывается: `"Details" = 'Логирование операций с сертификатом'`. В логирование записываются данные по выпуску и отзыву сертификата

![alt text](media/image-14.png)


### Вкладка "Коллектор"

На данной вкладке история событий приложения.

Заполнить таблицу можно аналогично вкладке [логов](#вкладка_логи).

![alt text](media/image-9.png)

### Настройки выборок для логов приложения

Для настройки выборки для логов необходимо перейти в Меню - Управление пользователями - Настройки выборок для логов приложения и в открывшемся реестре нажать создать.

В открывшейся форме необходимо заполнить следующие поля:

* **Наименование выборки** - наименование выборки в выпадающем списке;

* **Форма** - указывается для какой формы 

* **Скрипт для вычисления** -  указывается служебное наименование формы, в которой необходимо отображать данную настройку, например, в [логах](#вкладка_логи). Если поле незаполнено то данная настройка отображается во всех формах.


`"Level" (text)` - вид лога: ошибка (error), инф.сообщение (info), предупреждение (warn)

`"Message" (text)` - текст сообщения,

`"UserMessage" (text)`- текст сообщения пользователю,

`"Details" (text)` - детально,

`"Request" (text)` - запрос,

`"Service" (text)` - название сервиса

![alt text](media/image-5.png)

!!! example "Примеры"

	=== "Все по 1с"
		``` sql
		"Service" IN ('odata')
		```
	=== "Все кроме 1с"
		``` sql
		"Service" NOT IN ('odata')
		```
	=== "Все по сервису подписания"
		``` sql
		"Service" ILIKE  '%dss%'
		```
	=== "Логи шедулера"
		``` sql
		"CUser" = 'SchedulerUser'
		```
    === "Всё по jsreport+file+preview"
		``` sql
		"Service" IN ('jsreport', 'file', 'preview')
		```
   	=== "Все кроме коллектора"
		``` sql
		"Service" NOT IN ('collector')
		```
	=== "По тексту сообщения"
		``` sql
		"Message" ILIKE '%ошибка%1С%'
		```
	=== "По сервису odata только ошибки"
		``` sql
		"Service" = 'odata' AND "Level" = 'error'
		```
	=== "Логи по сертификатам"
		``` sql
		"Details" = 'Логирование операций с сертификатом'
		```
	=== "Действия по маршруту"
		``` sql
		"EventType" ILIKE '%Clicked%'
		```

#### Примеры логирования:

- Авторизация пользователей. В **Доп.условие выборки** указывается: `"EventType" = 'session: start'`

![alt text](media/image-10.png)

## Форма "Управление пользователями"

**Описание**

С помощью данной формы можно посмотреть журнал действий конкретного пользователя. Для этого нужно перейти в документ "Управление пользователями" в подраздел ["Журнал действий пользователей"](../Управление пользователями/#журнал_действий_пользователей). Выберите необходимого пользователя и нажмите кнопку **"Журнал действий пользователя"**

![Журнал действия](media/SelectJornal.png)

## Форма "Просмотр событий"

**Описание**

Для перехода в форму "Просмотр событий" в меню Пользователя выберите "Просмотр событий". Пользователь должен обладать правами Администратора.

![Просмотр событий](media/eventViewer.png)

![Реестр](media/reestr.png)

- Сессия – идентификатор сессии;
- Пользователь - логин пользователя;
- Событие – тип события;
- Объект – идентификатор модели или запроса, к которому шло обращение;
- Параметры – параметры, с которыми загружаются или изменяются данные;
- Ключ маршрута – маршрут вкладки приложения, в которой была инициирована работа с данными;
- Идентификатор формы – параметр-идентификатор в маршруте, по которому была открыта вкладка, например, идентификатор документа;
- Класс формы – класс формы, которая открывается в данной вкладке;
- Браузер – информация о браузере (название и версия), в которыом работал пользователь;
- Запрос – идентификатор запросов на загрузку или изменение данных для отслеживания цепочки клиент-сервер;
- Дата – время вызова события;
- Идентификатор организации – идентификатор организации, в которой находился пользователь при вызове события.

Можно настроить загрузку данных, например по Пользователю, сессии, событию и т.д.

Для этого в панели инструментов нажмите кнопку "Загрузка данных". 

![Загрузка](media/load.png)

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

![Загрузка данных](media/loadData.png)
![Отфильтрованные сессии](media/session.png)