Пример создания и регистрации событий журнала событий
Рассмотрим пример импорта данных из файла. Импорт выполняется в запланированном задании. В процессе импорта могут возникать ошибки, которые по условию примера необходимо фиксировать в журнале событий.
- ОперацияИмпортДанных — с помощью данного события будем регистрировать начало и завершение операции импорта
- ОшибкаИмпорта — с помощью данного события будем регистрировать ошибки, которые могу произойти в процессе импорта
- ОтладкаИмпорта — с помощью данного события будем регистрировать факт успешного завершения импорта, а также записывать дополнительную информацию об измененных объектах, задании импорта и времени выполнения операции.
Создайте в проекте подсистему ИмпортДанных. Добавьте в нее три элемента проекта вида Событие Журнала Событий. Описание элементов проекта может выглядеть следующим образом:
ВидЭлемента: СобытиеЖурналаСобытий
Ид: a565661f-7777-465b-8f71-1f90cd490890
Имя: ОперацияИмпортДанных
ОбластьВидимости: ВПодсистеме
Описание: Операция импорт отмечается событиями с началом и концом операции.
В событии конца операции при условии успешного завершения выводится
информация об измененных объектах, задании импорта и времени выполнения операции.
Важность: Низкая
ВидСобытия: Операция
ШаблонПредставленияНачала: Начало операции импорта %{Задание}
ШаблонПредставленияКонца: Операция импорта %{Задание} завершена успешно.
Добавлено %{Добавлено}, пропущено %{Пропущено} объектов.
Общее время %{Длительность}.
ШаблонПредставленияОшибки: Операция импорта %{Задание} завершена с ошибкой.
Общее время %{Длительность}.
Свойства:
-
Ид: a565661f-f458-465b-8f71-1f90cd396890
Имя: Добавлено
Тип: Число
ЗначениеПоУмолчанию: 0
-
Ид: a568521f-f458-465b-8f71-1f90cd490890
Имя: Пропущено
Тип: Число
ЗначениеПоУмолчанию: 0
-
Ид: a710661f-f458-465b-8f71-1f90cd490890
Имя: Задание
Тип: Строка
Обязательно: Истина
ВидЭлемента: СобытиеЖурналаСобытий
Ид: a568521f-f458-465b-8f31-1f90cd490890
Имя: ОшибкаИмпорта
ОбластьВидимости: ВПодсистеме
Описание: Событие регистрируется при любой ошибке импорта файла данных независимо от транзакции.
Содержит информацию о задании импорта и блоке данных, на котором произошел сбой.
ВидСобытия: Ошибка
ХарактерОшибки: ДляПоддержки
ШаблонПредставления: Задание %{Задание} завершилось с ошибкой на этапе
обработки объекта %{ОписаниеОбъекта}: %{ОтладочнаяИнформация}.
Свойства:
-
Ид: a568521f-f458-460b-8f31-1f90cd490890
Имя: Задание
Тип: Строка
Обязательно: Истина
-
Ид: a568581f-f458-465b-8f31-1f90cd490890
Имя: ОписаниеОбъекта
Тип: Строка
Обязательно: Истина
-
Ид: a568521f-f458-225b-8f31-1f90cd490890
Имя: ОтладочнаяИнформация
Тип: Строка
ВидЭлемента: СобытиеЖурналаСобытий
Id: a565661f-7237-465b-8f71-1f90cd490890
ВидСобытия: Информация
Имя: ОтладкаИмпорта
Важность: Низкая
Описание: Событие регистрируется в момент успешного окончания импорта файла данных
после подтверждения транзакции. Содержит информацию об измененных объектах,
задании импорта и времени выполнения операции.
ШаблонПредставления: Задание импорта %{Задание} успешно завершено. Объект %{ОписаниеОбъекта}
Свойства:
-
Id: a565661f-7877-465b-8f71-1f90cd490890
Имя: Задание
Тип: Строка
Обязательно: Истина
-
Id: a565661f-7777-884b-8f71-1f90cd490890
Имя: ОписаниеОбъекта
Тип: Строка
Обязательно: Истина
У каждого события есть ШаблонПредставления. Это форматная строка, в которой формируется хорошо читаемое сообщение для человека и которая будет отображаться в журнале событий. Также для каждого события задано некоторое количество свойств. Значения этих свойств используются в форматной строке, содержащейся в свойстве ШаблонПредставления.
Затем добавьте в проект элемент ОбщийМодуль и назовите его ИмпортДанных. В нем вы запишите основную логику импорта данных, а также осуществите регистрацию событий в нужный момент.
Вначале добавьте константы, в которых будут сохранены ключ запланированного задания и путь к файлам, которые необходимо импортировать, а также напишите метод, который будет планировать задание импорта данных:
конст КЛЮЧ_ЗАДАНИЯ: Строка = "Импорт данных"
конст ПУТЬ_К_ФАЙЛАМ_ДЛЯ_ИМПОРТА = "Путь к файлам"
@ВПроекте
метод ЗапланироватьЗадание()
знч Задание = ЗапланированныеЗадания.Создать(&ИмпортДанных.ВыполнитьИмпорт)
Задание.Настроить(Ключ = КЛЮЧ_ЗАДАНИЯ,
ХранениеРезультатов = СтратегияХраненияРезультатов.Последний(),
ПовторыПриУспехе = СтратегияПовтора.Интервал(1д),
ПовторыПриОшибке = СтратегияПовтора.Интервал(1ч),
СтратегияПубликации = СтратегияПубликации.Перезапустить)
Задание.Запланировать()
;
метод ВыполнитьИмпорт()
пер Файл = новый Файл(ПУТЬ_К_ФАЙЛАМ_ДЛЯ_ИМПОРТА)
если Файл.Существует()
ИмпортДанных(КЛЮЧ_ЗАДАНИЯ, Файл)
Файлы.Удалить(Файл)
;
;
Затем следует написать основной код, отвечающий за импорт данных. В этом модуле
вы будете регистрировать описанные ранее
события:@НаСервере
метод ИмпортДанных(КлючЗадания: Строка, Данные: Файл)
// КлючЗадания - ключ запланированного задания
// Данные - импортируемый файл
исп Контекст = новый ОперацияИмпортДанных(Задание = КлючЗадания).ЗаписатьНачало()
// Здесь регистрируется событие начала операции импорта
// Свойства события:
// Задание = КлючЗадания (из конструктора)
// Важность = Низкая (из описания события)
// Добавлено = 0 (из описания события)
// Пропущено = 0 (из описания события)
// ВидСобытия = НачалоОперации
// Ид = случайное значение
// Момент = момент записи события
исп ПотокДанных = Данные.ОткрытьПотокЧтения()
пер Читатель = новый ЧтениеДанных(ПотокДанных)
пока (не Читатель.ЧтениеЗавершено())
пер Элемент = Читатель.ПрочитатьСтроку()
попытка
ИмпортДанных(Элемент, Контекст)
Контекст.Добавлено += 1
новый ОтладкаИмпорта(Задание=КлючЗадания, ОписаниеОбъекта = Элемент).Записать()
// Здесь регистрируется событие ОтладкаИмпорта, в свойства которого
// будет записана информация для отладки
// Свойства события:
// Задание = КлючЗадания (из конструктора)
// ОписаниеОбъекта = Элемент (текущий импортируемый элемент)
// Важность = Низкая (из описания события)
// ВидСобытия = Информация
// Ид = случайное значение
// Момент = момент записи события
поймать И: Исключение
пер Важность = ВажностьСобытия.Высокая
если И это ИсключениеЧтенияJson
Важность = ВажностьСобытия.Обычная
;
новый ОшибкаИмпорта(Важность = Важность, Задание = КлючЗадания,
ОписаниеОбъекта = Элемент, ОтладочнаяИнформация = И.ПоследовательностьВызовов).Записать()
// Здесь регистрируется событие ошибки
// Свойства события:
// Задание = КлючЗадания (из конструктора)
// Важность = В зависимости от типа исключения
// ОписаниеОбъекта = Элемент
// ОтладочнаяИнформация = Последовательность вызовов до места выбрасывания исключения
// ВидСобытия = Ошибка
// Ид = случайное значение
// Момент = момент записи
Контекст.Пропущено += 1
;
;
// Событие завершения операции ОперацияИмпортДанных записывается при выходе из метода
// Свойства события ОперацияИмпортДанных на момент завершения операции:
// Задание = КлючЗадания (из конструктора)
// Важность = Низкая (из описания события)
// Добавлено = подсчитанное значение
// Пропущено = подсчитанное значение
// ВидСобытия = КонецОперации
// Ид = случайное значение
// Момент = момент записи
метод ИмпортДанных(Элемент: Строка, Контекст: ОперацияИмпортДанных.КонтекстОперации)
// Здесь осуществляется импорт данных
;
Для того чтобы найти события типа ОтладкаИмпорта для дальнейшей
работы с ними, вы можете написать следующий
код:@НаСервере
метод ПоискСобытийОтладки(): Массив<ОтладкаИмпорта>
пер НайденныеСобытия = новый Массив<ОтладкаИмпорта>()
исп Результат = ЖурналСобытий.Найти(ТипыСобытий = {Тип<ОтладкаИмпорта>})
пока (Результат.Следующий())
НайденныеСобытия.Добавить(Результат.Событие как ОтладкаИмпорта)
;
возврат НайденныеСобытия
;
Для того чтобы запустить запланированные события, следует прописать в модуле проекта следующий
код:импорт Журнал
@НастройкаПриложения(Ид="ЗапускИмпортаДанных", Номер=1)
метод ПланированиеЗаданияИмпортаДанных()
ИмпортДанных.ЗапланироватьЗадание()
;
Таким образом, при первой публикации проекта будет вызван метод
ПланированиеЗаданияИмпортаДанных(), который в свою очередь
вызовет метод ЗапланироватьЗадание() из модуля
ИмпортДанных.В данном примере:
- Все действия импорта проходят в одной операции журнала событий. Эта операция описана событиями типа ОперацияИмпортДанных.
- При ошибках регистрируется событие ОшибкаИмпорта.
- В событии типа ОперацияИмпортДанных, которое завершает операцию журнала событий, будут установлены значения свойств Добавлено и Пропущено. В свойстве Добавлено будет содержаться количество обработанных файлов, а в свойстве Пропущено — количество файлов, обработать которые не удалось.
- Откройте вкладку Приложения в панели управления.
- Кликните на нужное приложение. Откроется панель управления приложения.
- В правом верхнем углу кликните на символ , после чего в контекстом меню выберите
Посмотреть журнал событий. У вас откроется журнал
приложения.
Здесь вы увидите все зарегистрированные события журнала событий, в том числе те, которые вы описали в проекте:
- Кликните на событие, чтобы увидеть его описание:
- Кликните на иконку вопроса в правом верхнем углу, чтобы получить информацию о событии: